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

Stored procedures 如何在多个存储过程上运行相同的tsqlt测试?,stored-procedures,tsqlt,Stored Procedures,Tsqlt,我有很多存储过程,每个存储过程都有自己的tsqlt测试类。在每个测试类中,大约5个测试对于所有存储过程都完全相同,并且大约5个测试对于存储过程是唯一的 有时我想更改一个“通用”测试,我必须在10个或更多文件中更改它,这是一个麻烦 是否有某种方法可以在单个文件中定义一组测试,然后从另一个测试类调用这些测试,以便在调用测试类正在测试的存储过程上运行这些测试?一种解决方案可能是创建一个TestHelpers类,将您的公共测试代码添加到此类中,但不使用“测试”前缀,以便tSQLt不会自动运行它们。这些过

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

有时我想更改一个“通用”测试,我必须在10个或更多文件中更改它,这是一个麻烦


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

一种解决方案可能是创建一个TestHelpers类,将您的公共测试代码添加到此类中,但不使用“测试”前缀,以便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