【问题标题】:TDD With Store Procedures带有存储过程的 TDD
【发布时间】:2023-04-04 04:28:01
【问题描述】:

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

【问题讨论】:

    标签: database stored-procedures


    【解决方案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/

    【讨论】:

      【解决方案2】:

      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/

      【讨论】:

      • 感谢 DVK。我们目前正在使用 Sybase。我找不到任何 Sybase 框架。
      • 我们在 Sybase 上,所以我们推出了自己的 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 2019-09-07
      • 2014-08-17
      • 2020-08-31
      • 2018-04-17
      • 2015-04-14
      • 2015-12-17
      相关资源
      最近更新 更多