我有一个现有的asp.net webforms应用程序,我想添加一些单元测试,但不确定如何去做。
该应用程序是数据库驱动的,并且具有类似于高级论坛的功能。逻辑、数据访问和表示大部分都是分离的。
我应该测试哪些方法?
我如何处理数据库和测试数据?
是否有任何推荐的工具可以协助完成此任务?
我有一个现有的asp.net webforms应用程序,我想添加一些单元测试,但不确定如何去做。
该应用程序是数据库驱动的,并且具有类似于高级论坛的功能。逻辑、数据访问和表示大部分都是分离的。
我应该测试哪些方法?
我如何处理数据库和测试数据?
是否有任何推荐的工具可以协助完成此任务?
首先,你需要决定的是:添加单元测试的动机是什么?
有很多优秀的理由来编写单元测试(我自己严格实践TDD),但了解在您的情况下主要推动力是什么应该有助于您决定首先编写哪些测试。
在大多数情况下,您应该集中精力为过去给您带来最大痛苦的应用程序区域编写单元测试。
许多经验表明,当软件没有单元测试时进行初始编写后,随后添加单元测试会很困难。《与遗留代码共处的有效方法》提供了有价值的指导,帮助使未经测试的软件项目可测试。
对于与数据库相关的单元测试,我们使用一个单独且稳定的测试数据库来执行单元测试。
我们还将数据修改测试包装在未提交的TransactionScope
中,因此可以回滚数据更改以进行后续的测试运行。我们发现这种方法非常有效。
我会测试你的Web表单调用的后端方法(绕过表单验证),这样可以让你测试逻辑和数据访问。
至于测试数据,最好使用单独的测试数据库。否则,我建议在测试完成后,测试方法删除测试数据。
就工具而言,我也在寻找一种测试ASP.NET WebForms应用程序的方法。对于模型部分(数据访问等),我使用NUnit、本地SQL Express数据库,并编写了代码来创建模式(从我们检入的.sql文件)在所有测试运行之前。
在测试之间,我使用NUnit DataRollback 扩展来回滚每次运行后的任何数据库更改。
然而,我仍然不知道一种好的方法来测试页面中的逻辑,类似于Rails的功能测试。从覆盖率的角度来看,这是毁灭性的。你可以将很多逻辑推回到你的模型中,但不可避免地,在你的代码后面的文件中有重要的代码,可能会出错,你想进行单元测试。