如何在多个存储过程上运行相同的tsqlt测试?

时间:2018-01-25 15:28:06

标签: stored-procedures tsqlt

我有很多存储过程,每个存储过程都有自己的tsqlt测试类。在每个测试类中,大约5个测试对于所有存储过程完全相同,并且大约5个测试对于存储过程是唯一的。

偶尔我想改变其中一个"普通"测试,我必须在10个或更多文件中更改它,这是一个麻烦。

我是否可以通过某种方式在单个文件中定义一组测试,然后从另一个测试类调用这些测试,以便在调用测试类正在测试的存储过程上运行测试?

1 个答案:

答案 0 :(得分:1)

一个解决方案可能是创建一个TestHelpers类,将常用的测试代码添加到此类但没有“test”前缀,因此tSQLt不会自动运行它们。这些过程需要输入参数,例如要测试的过程的名称等,还包括标准的tSQLt断言。

然后在特定于过程的测试类中,您只需在测试中调用TestHelper版本。

我不确定您的确切用例,但让我们假设这些过程之间的一个共同因素是它们都返回相同的结果集(但具有不同的内容)并且您希望通用测试来断言结果集结构应该是应该的。

你可以像这样创建一个帮助程序

create procedure [TestHelpers].[ValidateResultSet]
(
  @ProcedureToTest nvarchar(200)
)
as
begin
    --! common set up omitted for brevity
    exec tSQLt.AssertResultSetsHaveSameMetaData...
end

然后在您的过程测试类中,您可以创建如下所示的测试:

create procedure [MyFirstProcedureTests].[test result set]
as
begin
    --! MyFirstProcedure-specific  set up omitted
    exec TestHelpers.ValidateResultSet 'MyFirstProcedure';
end

create procedure [MySecondProcedureTests].[test result set]
as
begin
    --! MySecondProcedure-specific  set up omitted
    exec TestHelpers.ValidateResultSet 'MySecondProcedure';
end

我现在无法访问数据库来证明这一点,但它应该可行,因为我过去做过类似的事情。