如何在.Net中编写数据访问层测试?

Ami*_*abh 8 .net nhibernate tdd nunit

是否有为数据访问层编写单元测试的框架?这有几个问题.
1.如何填充数据库?
2.我们如何确保一个测试不修改db中可能无法通过另一个测试的值?

是否有一个可以处理上述问题的良好框架?

更新:我遇到了nDBUnit,它可以解决测试数据访问层的基础设施问题.

http://code.google.com/p/ndbunit/wiki/QuickStartGuide

Aar*_*ght 17

我想我会插话,因为到目前为止我真的不喜欢一些答案.

无论你称之为"单元测试"还是"集成测试"或"supercalifragilisticexpialidocious测试",在这种情况下都无关紧要; 对数据访问组件只有一个有效的测试,它是在实际数据上测试它.显然不是生产数据,而是合理的传真.

您需要做的第一件事是将数据库本身置于源代码管理之下.可悲的是,没有这方面的框架; 微软在某些版本的VSTS中占据了一席之地,但最终结果仍然缺乏.至少在今天的世界里,你将不得不自己做很多这方面的工作.但要认真对待 - 当主要更新变得拙劣并且您需要回滚数据库时,您不会后悔.

您在源代码管理下放置的内容应该是生成最新架构所需的一切,通常是基线脚本,加上"配置数据"脚本(即枚举表的内容),以及升级脚本以反映最近的架构更改.这为您提供在临时数据库上执行"实时"测试所需的几乎所有内容; 您的测试只需要从源代码控制下载这些脚本并在测试服务器和/或不同的数据库实例上运行它们,通常使用SQL管理对象来运行所述脚本(SMO可以处理GO语句等;常规SqlConnection不能).

各种工具可以帮助您在测试数据库中生成测试内容.可能最受欢迎的是Red Gate的SQL数据生成器.这些工具还可以生成用于创建数据的脚本,这是您在测试中使用的内容.或者,如果您这样选择,则可以从生产数据库中清除数据并使用SQL Server Management Studio编写您选择保留用于测试的任何数据.无论哪种方式,将测试数据脚本保存在源代码管理中,与架构脚本相同,并且当您需要测试DAL时,请在启动数据库实例后下载这些脚本并使用它们填充数据.

我希望有一个框架,做到这一切给你,但与工具,库和良好的发展实践正确的集合,你可以使之成为一个更痛苦的过程这一点.

  • 测试是测试.它们都需要在依赖项更改时运行.*我的抱怨是大力设计和运行那些最不可能失败(或暴露缺陷)并将任何较慢/更复杂的测试视为二等公民的测试. (3认同)