【发布时间】:2010-11-06 00:26:09
【问题描述】:
我有一个现有的 asp.net webforms 应用程序,我想在其中添加一些单元测试,但我不确定如何去做。
该应用程序是由数据库驱动的,我想您可以将其与高级论坛进行比较。逻辑、数据访问和表示大部分是分开的。
我应该测试哪些方法?
如何处理数据库和测试数据?
有没有推荐的工具来帮助解决这个问题?
【问题讨论】:
标签: asp.net unit-testing webforms
我有一个现有的 asp.net webforms 应用程序,我想在其中添加一些单元测试,但我不确定如何去做。
该应用程序是由数据库驱动的,我想您可以将其与高级论坛进行比较。逻辑、数据访问和表示大部分是分开的。
我应该测试哪些方法?
如何处理数据库和测试数据?
有没有推荐的工具来帮助解决这个问题?
【问题讨论】:
标签: asp.net unit-testing webforms
您需要决定的第一件事是:您添加单元测试的动机是什么?
进行单元测试有很多很好的理由(我自己严格练习 TDD),但是知道哪个是您案例的主要驱动力应该有助于您决定首先编写哪些测试。
在大多数情况下,您应该专注于为您的应用程序中过去给您带来最大痛苦的领域编写单元测试。
很多经验表明,当软件最初是在没有单元测试的情况下编写的,随后很难改进单元测试。 Working Effectively with Legacy Code 提供了有关如何使未经测试的软件项目可测试的宝贵指导。
【讨论】:
我很可能会测试您的网络表单调用的支持方法(绕过表单验证),这将让您测试逻辑和数据访问。
对于测试数据,单独的测试数据库是最好的选择。否则,我建议让测试方法在完成后删除测试数据。
【讨论】:
对于与数据库相关的单元测试,我们使用独立且稳定的测试数据库来执行单元测试。
我们还将数据修改测试包装在未提交的TransactionScope 中,因此为后续测试运行回滚数据更改。我们发现这非常有效。
【讨论】:
在工具方面,我也在寻找某种方法来测试 ASP.NET 网络表单应用程序。对于模型部分(数据访问等),我使用 NUnit,一个本地 sql express db,并在所有测试运行之前编写代码来创建模式(从我们签入的 .sql 文件)。
在测试之间,我使用 NUnit DataRollback 扩展在每次运行后回滚任何数据库更改。
我仍然不知道测试页面逻辑的好方法,类似于 Rails 的功能测试。从覆盖的角度来看,这是毁灭性的。您可以将大量逻辑推回您的模型中,但在您的代码背后的文件中总是有一些代码很重要,可能会中断,并且您希望进行单元测试。
【讨论】: