【发布时间】:2011-11-24 14:16:10
【问题描述】:
如何用asp.net 4.0 Web Forms做TDD/BDD?我有一个规模很大的现有网站,我们没有对数据库的每次更改进行任何测试,我们必须猜测会破坏什么?我想介绍单元测试请指点?
【问题讨论】:
标签: unit-testing webforms
如何用asp.net 4.0 Web Forms做TDD/BDD?我有一个规模很大的现有网站,我们没有对数据库的每次更改进行任何测试,我们必须猜测会破坏什么?我想介绍单元测试请指点?
【问题讨论】:
标签: unit-testing webforms
很大程度上取决于您现有代码库的结构。
将单元测试,尤其是 TDD 改造到遗留项目中可能需要做很多工作。通常,您会发现数据库和业务逻辑位于网页的代码隐藏文件中。
在这里使用接口类型是您的朋友,因为 Visual Studio 可以为您自动生成接口类。 (将光标放在类名上,右键,选择重构并提取接口)
我会努力将您的数据库代码分离到它自己的类库项目中。然后,您可以指定业务逻辑等可以通过其访问数据库的公共接口。所有其他代码都应将数据库存储库视为黑盒。
创建一个工厂来创建您的存储库(基于该接口),让它创建一个测试类型和一个实时类型。实时类型将链接到您当前的数据库代码。测试类型将只返回硬编码值。您可以使用实时数据库编写测试,然后您可以以 TDD 方式为“测试”数据库编写测试。
一旦它们都匹配(所有测试都通过),任何新的数据库功能都会添加,方法是先编写在“测试”数据库上运行的测试,然后再在实时数据库上运行。
请记住,所有代码都应该只使用数据库接口,而不是实例化的实时数据库类。
一旦掌握了流程的窍门,您就可以在数据库代码中进行更深入的研究(如果您愿意的话),但我想说的是,在分离和测试业务和 UI 逻辑时遵循相同的流程在遗留问题上更实用项目。
您可能会发现一种务实的方法是仅按照我在您添加新代码时所描述的过程分离出功能。换句话说,在您添加新功能之前,按照描述编写显示它通过的测试(实时和测试版本)的代码分离代码,然后根据测试通过或失败来指导您的编码来更改或添加新功能的测试。
如果涵盖所有基础,您希望进行失败测试、通过测试以及异常情况测试。
祝你好运。这不是胆小的人的工作(过去不得不多次这样做)。
【讨论】: