TDD与商店程序

时间:2010-08-11 21:52:59

标签: database stored-procedures

当我在.Net(c#)编码时,我使用NUnit和Rhino Mock进行测试。没有做太多的数据库编码(Store Procs)。我们如何使用数据库编码(Store Procs)进行TDD?

2 个答案:

答案 0 :(得分:1)

如果您正在使用SSDT数据库项目,则可以使用SSDT单元测试中的重命名技巧来模拟代码入口点,就像在常规C#中一样。不是真正的IoC,但要完成工作,直到出现更好的东西。

我写了一篇关于它的帖子:

https://tangodude.wordpress.com/2014/02/08/ssdt-database-projects-mocking-database-objects-for-isolated-unit-testing-kind-of/

你也可以为你的开发提供tSQLt,它支持比SSDT更好的DI。

http://tsqlt.org/user-guide/isolating-dependencies/

答案 1 :(得分:0)

1)有一个框架,允许你获取一个DB对象,并复制它。当您拥有包含存储在文件系统中的表定义的数据库源代码时,这很有用。

  • 将表的副本复制到临时数据库中。包括索引等。

  • 存储过程或触发器的副本,用于替换表格/其他名为SP的所有数据库名称和临时数据库

  • 能够使用从现有表克隆的数据(使用某些过滤器)或存储的准备数据集预先填充表格,例如,作为bcp输入文件

2)有一个框架,用指定的测试数据加载指定的测试表,然后克隆所有其他所需的SP /触发代码

3)有一个框架来执行克隆的存储过程,并评估从它们返回的结果和表中剩下的数据,以防它们更新数据。

为了给它带来味道,开发和部署完整 TDD系统需要花费几个人月的时间,其中包括此处列出的所有功能作为一个小子集。


还有一些纪念产品可供选择:

http://www.infoq.com/articles/tdd-dbpro-Foy


此外,还有针对特定数据库后端的产品,不确定您使用哪一个:

Postgres:http://en.dklab.ru/lib/dklab_pgunit/


补充阅读:

MSDN http://msdn.microsoft.com/en-us/magazine/cc164243.aspx

http://tddbootcamp.com/2010/01/27/writing-tests-for-stored-procedures/