Pin*_*ong 9 sql-server visual-studio tsqlt sql-server-data-tools sql-server-unit-testing
我有一个需要SQL Server单元测试的新项目,以及带有VSTS的CI/CD.
以下是所需的功能
针对存储过程的SQL服务器单元测试,为每个测试设置初始目标表并进行清理
在sql中进行单元测试
带有VSTS和Git的CI/CD
易于安装且易于使用
我查看了SSDT 2017,看起来不错.但它似乎缺少一个功能,可以在预测试步骤中的每个测试之间轻松共享通用设置脚本.它可能缺少应该可用于日常使用的其他功能.但我可能错了.
哪个工具更适合2017年的一般sql server单元测试?
dat*_*ity 20
没有更多用于SQL开发的单元测试解决方案的原因之一是因为适当的单元测试对于数据库而言本质上更难以让人们不这样做.这是因为数据库维护状态和参照完整性.想象一下,为存储过程(order_detail_update_status)更新order_detail表状态标志的单元测试.order_detail表依赖于order_header和product表,order_header依次具有外键customer,employee而产品表可能依赖于product_category,product_type和supplier.这至少有七个表(可能更多)需要填充有效数据才能编写一个测试,而其中一个表中的一个只与测试中的代码无关.
因此,您应该在单元测试解决方案中寻找的是 - 能够以最少的设置来测试离散的代码单元.理想情况下,您可以只设置所需的测试数据order_detail并忽略其余的表 - 我知道只有一个测试框架允许您这样做.
此外,单元测试应该具有最小的失败原因,在上面的示例中,order_detail_update_status只更新order_detail表上的单行.如果将一个新的非空列添加到客户表中(测试设置未处理),那么您的测试可能会因完全不相关的原因而失败.这使得测试非常脆弱,并且在紧迫的交付期限的压力下,开发人员将很快放弃编写和维护测试.
一套单元测试应该以任何顺序运行,没有相互依赖性,良好的测试框架应该支持这一点以及设置,拆除和支持模拟对象(可能是也可能不是同一框架的一部分).在上面的场景中,order_detail如果你不想花费大量的时间来修复因为没有"好"而失败的测试,那么模拟表来测试只接触order_detail表的模块的能力是最重要的特性之一.原因.
因此,就您的要求和上述几点而言,我所知道的只有一个框架可以完成所有这些 - tSQLt.这是基于实际经验 - 我在上一个项目中有超过6,000个tSQLt单元测试.它包括以下功能:
它在CI/CD中与VSTS非常兼容,并且由于所有单元测试都是用T-SQL编写的,因此它非常易于使用.
在Visual Studio中使用tSQLt的最佳方法是使用复合项目 - 其中应用程序数据库对象和模块在一个项目中维护,而tSQLt框架和所有单元测试都是第二个项目的一部分.有一个很好的工作,让你在这里开始.
几年前我写了一篇关于tSQLt对Simple-Talk的好处的更详细的文章,可能也会有所帮助
请注意,Microsoft 正在推广slacker,请参阅Channel 9:DevOps 管道中的 SQL Server 数据库单元测试。我们发现它在 Azure SQL 设置中运行得相当好。对于 Azure SQL 上的 tSQLt,我记得有关启用 CLR 和 TRUSTWORTHY 选项的一些问题,但也看到它应该仍然有效,例如这里:
| 归档时间: | 
 | 
| 查看次数: | 3442 次 | 
| 最近记录: |