【发布时间】:2023-04-04 04:28:01
【问题描述】:
当我在 .Net (c#) 中编码时,我使用 NUnit 和 Rhino Mock 进行测试。没有做太多的数据库编码(Store Procs)。我们如何使用数据库编码(Store Procs)进行 TDD?
【问题讨论】:
标签: database stored-procedures
当我在 .Net (c#) 中编码时,我使用 NUnit 和 Rhino Mock 进行测试。没有做太多的数据库编码(Store Procs)。我们如何使用数据库编码(Store Procs)进行 TDD?
【问题讨论】:
标签: database stored-procedures
如果您使用的是 SSDT 数据库项目,您可以使用 SSDT 单元测试中的重命名技巧来模拟您的代码入口点,就像在常规 C# 中所做的那样。不是真正的 IoC 东西,但会完成工作,直到出现更好的东西。
我写了一篇关于它的帖子:
您也可以为您的开发使用 tSQLt,它支持比 SSDT 更好的 DI。
【讨论】:
1) 拥有一个允许您获取数据库对象并对其进行复制的框架。当您的数据库源代码(包括存储在文件系统上的表定义)时,这很有效。
将表的副本复制到临时数据库中。包括索引等。
存储过程或触发器的副本,它用临时数据库替换所有以表/其他称为 SP 为前缀的 DB 名称
能够使用从现有表中克隆的数据(使用某些过滤器)或存储的准备好的数据集(例如,作为 bcp 输入文件)预填充表
2) 拥有一个框架,该框架使用指定的测试数据加载指定的测试表,然后克隆所有其他需要的 SP/触发代码
3) 有一个框架来执行克隆的存储过程,并评估从它们返回的结果和留在表中的数据,以防它们更新数据。
为了给它增添风味,我们花了两个月的时间来开发和部署一个完整的 TDD 系统,其中包含此处作为一个小子集列出的所有功能。 p>
还有一些商业产品可用:
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/
【讨论】: