Unit testing 是否可以在SSDT数据库单元测试中重用测试条件或测试步骤?
我最近开始使用SSDT数据库单元测试。我发现我有许多相同的测试条件,但我找不到一种方法来重用它们。我需要说多少次“并且只能返回一行” 类似地,我已经开始发现需要相同数据的多个单元测试。这似乎意味着我应该使用相同的预测试步骤。但是我也找不到一种重用预测试步骤的方法Unit testing 是否可以在SSDT数据库单元测试中重用测试条件或测试步骤?,unit-testing,sql-server-data-tools,Unit Testing,Sql Server Data Tools,我最近开始使用SSDT数据库单元测试。我发现我有许多相同的测试条件,但我找不到一种方法来重用它们。我需要说多少次“并且只能返回一行” 类似地,我已经开始发现需要相同数据的多个单元测试。这似乎意味着我应该使用相同的预测试步骤。但是我也找不到一种重用预测试步骤的方法 有什么我遗漏的吗?或者是有一种方法可以重用这些组件,或者是有某种原因使我不需要重用它们?首先,最重要的是,无法在多个测试中重用测试前、测试后或测试条件。是的,这很烦人,但我可以理解——确保每个测试都是独立的,这让我觉得是个好主意 我过去
有什么我遗漏的吗?或者是有一种方法可以重用这些组件,或者是有某种原因使我不需要重用它们?首先,最重要的是,无法在多个测试中重用测试前、测试后或测试条件。是的,这很烦人,但我可以理解——确保每个测试都是独立的,这让我觉得是个好主意 我过去解决无法重用测试数据问题的一种方法是编写存储过程,创建测试数据,并将这些存储过程包含在我正在测试的SSDT项目中,然后从预测试中调用存储过程 这种方法的缺点是,这些存储过程最终成为已部署数据库的一部分—这不是一件好事,因为您不希望存储过程仅用于在生产数据库中创建测试数据。解决这个问题的方法是将这些“测试数据”存储的过程放入一个专用的SSDT项目中,并创建一个从该项目到SSDT项目的“相同数据库”数据库引用,其中包含所有要测试的代码。部署第二个项目也将部署第一个项目。这种技术被称为组合项目
所以这是解决“共享测试数据”问题的一种方法。我不知道有什么方法可以共享测试条件,除了去破解底层的C#代码,但我不愿意推荐这种方法。类似的问题是安装/拆卸代码的重复。我喜欢每个存储过程都有一个测试类。在一个测试类中,我经常有许多测试,这些测试关注运行相关存储过程引起的副作用和数据更改 我不喜欢每个类都有80%以上相同的设置和拆卸代码。这意味着,如果我的设置或拆卸发生更改,我有几十个类要更改
另一方面,这篇文章建议事情应该是这样的:在一个单元测试类中,在您添加的单个测试的同一下拉列表中有一个(通用脚本)部分 本节包含“测试初始化”和“测试清理”,您可以在其中添加在该类中的每个测试之前和之后运行的代码 您的一般测试结构如下所示
对于审计示例,请执行步骤5。在执行步骤1时,可能会确认[dbo].[Audit]有一条记录。将从[dbo]中删除。[Audit]将行数返回到0。谢谢,Jamie。这就是我害怕的。主要是因为读了你的博客,却什么也没看到;-)我想知道人们是如何组织大规模的SSDT单元测试来减轻痛苦的?或者,可能是痛苦太大,无法进行大规模SSDT单元测试。@jamiet抱歉,我认为您的说法不正确,(通用脚本)部分可以用作可重用数据初始化所需的原始海报。请看我的答案,看你是否同意。