测试ASP.NET WebForms应用程序

7
如果你处于我的位置,你会有一个庞大的WebForms应用程序,已经变成了难以维护的东西。当您添加新功能时,事情会出错,您需要一种廉价且易于维护的自动化测试方式。
现在,据我所知,正确的做法是尝试构建ASP.NET WebForms中存在的页面和用户控件模型的抽象布局,但是,由于它需要对现有应用程序进行重大投资,因此这不是一个选项。
我正在尽可能地推动REST类似的开发,因为它具有一些好的属性。在这样做的同时,我编写了一个简单的蜘蛛机器人,它爬行所有可以找到的URL并尝试获取它们。
这使我能够快速找到导致问题的错误数据,并避免让我的最终用户点击损坏的内容,但是,这当然还不够。
我继续研究我的爬虫程序,并将其开发成为一个简单的REST客户端,尝试不同的输入组合,寻找可能的错误或崩溃。它比仅仅进行详尽搜索更加智能(因为它了解ASP.NET WebForms应用程序层),我的目标是基本上探索Web应用程序的状态,希望在我们的用户之前击中所有边角情况。
有没有人有类似的经验?
此外,对于您那些测试方面的专家。这是完全浪费时间,还是我能够真正说出关于质量的东西?从我的角度来看,它似乎命中了一个甜点,因为它将尝试通过浏览器模拟潜在的最终用户。
正如我之前所说,我们陷入了困境。我们需要一个简单的方法来摆脱它,现在就需要。
我们尝试过像Selenium这样的东西,但它需要很多额外的工作,而且我们经常更改事物,不可能为50个不同的应用程序维护多个Selenium测试套件。
3个回答

5
在所有要实施的测试类型中,单元测试既是最容易的,也最有可能产生结果,即减少错误和更易于维护的代码。在处理自动化集成测试之前,先解决这个问题。
以下是需要遵循的步骤:
  1. 选择一个IOC容器 - 我个人喜欢Ninject
  2. 找到一个方便的地方将“服务”类注入到您的页面中(可以是基本页面类的构造函数或覆盖加载页面的模块,任何适合您的方法)
  3. 选择一个单元测试框架,如果您没有自动化构建,则设置一个;包括在该构建中运行完整套单元测试
  4. 每次接近aspx.cs文件中的逻辑时,请尝试将其隔离为服务,并在其周围包装单元测试
  5. 看看MVP模式是否适合您 - 我们发现它既增加了可测试性,也降低了生产力(但对某些人有效)
  6. 慢慢将应用程序迁移到MVC上,一次一个页面
并且请记住,您不会在一夜之间解决这个问题,因为时间有限。只需不断提高测试覆盖率,您将逐渐看到好处。

谢谢你的回答,你有使用MEF的经验吗?你能谈谈它与其他技术的区别吗? - John Leidegren
不好意思,我没有。商业上,我不喜欢碰微软的产品[我相信需要.NET 4?],除非它们已经发布、测试过并修复了失败,然后再次测试 :) - pdr
当前的MEF预览版不需要 .Net 4。 - Darrel Miller
Ninject和MVP模式都很有前途。然而,我目前所在的公司还没有引入这种东西的条件。典型的开发人员缺乏面向对象编程的基本理解。但是我会尽力在不久的将来推动这个方向。 - John Leidegren
@John 我也遇到了同样的情况,除了一个开发人员。我不得不努力推动。有些人让我感到惊讶,他们学会了,而其他人则离开了,我现在正在替换他们。这场战斗是值得的。祝你好运。 - pdr
显示剩余3条评论

1
你的应用程序哪一部分出了问题?是用户界面还是业务逻辑?
业务逻辑应该完全与用户界面分离,并单独进行测试。特别是,使用自动化单元测试工具来测试分离的业务逻辑比测试用户界面要容易得多。

是的,但想象一下一个世界,事情并不按照书本上说的那样进行,并且已经有很长时间没有按照书本上的做法进行了。即使按照书本上的方法进行了,将值推入业务层的管道工作也可能存在错误。我用于测试的接口是HTTP/ REST,这是唯一可靠的抽象层。这几乎已经变成了一个抢救的操作。 - John Leidegren

0

如果我没弄错的话,您有一个大型的 Web 表单,并希望在每次发布新版本时运行一些标准的最终用户测试。

我可以推荐 Selenium IDE adon for firefox。它可以让您记录用户操作,例如填写表单,并允许您随时重放这些操作。这是一个使用不同数据运行一些测试的简便方法。

对于内部代码测试,请编写一些使用 NUnit 的单元测试。


请问您能再次提供Selenium IDE插件的链接吗?该页面已经不存在了。 - Harry89pl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接