如何 运行 对多个存储过程进行相同的 tsqlt 测试?
How to run the same tsqlt tests on multiple stored procedures?
我有很多存储过程,每个存储过程都有自己的 tsqlt 测试 class。在每个测试中 class,大约有 5 个测试对所有存储过程完全相同,大约有 5 个测试是存储过程独有的。
偶尔我想更改其中一个 "common" 测试,我必须在 10 个或更多文件中更改它,这很麻烦。
有什么方法可以在单个文件中定义一组测试,然后从另一个测试 class 调用这些测试,以便测试 运行 在存储过程中正在通过调用测试 class?
进行测试
一个解决方案可能是创建一个 TestHelpers class,将您的常用测试代码添加到此 class 但没有 "test" 前缀,因此 tSQLt 不会 运行他们自动。这些过程需要输入参数,例如要测试的过程的名称等,并且还将包括标准的 tSQLt 断言。
然后在您的过程特定测试中 classes 您只需从测试中调用 TestHelper 版本。
我不确定您的确切用例,但让我们假设这些过程之间的共同因素之一是它们都 return 相同的结果集(但内容不同)并且您想要断言结果集结构是否正确的常见测试。
您可以像这样创建一个辅助程序
create procedure [TestHelpers].[ValidateResultSet]
(
@ProcedureToTest nvarchar(200)
)
as
begin
--! common set up omitted for brevity
exec tSQLt.AssertResultSetsHaveSameMetaData...
end
然后在您的程序测试中 classes 您可能会创建如下所示的测试:
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
我现在无法访问数据库来证明这一点,但它应该可以正常工作,因为我过去做过类似的事情。
我有很多存储过程,每个存储过程都有自己的 tsqlt 测试 class。在每个测试中 class,大约有 5 个测试对所有存储过程完全相同,大约有 5 个测试是存储过程独有的。
偶尔我想更改其中一个 "common" 测试,我必须在 10 个或更多文件中更改它,这很麻烦。
有什么方法可以在单个文件中定义一组测试,然后从另一个测试 class 调用这些测试,以便测试 运行 在存储过程中正在通过调用测试 class?
进行测试一个解决方案可能是创建一个 TestHelpers class,将您的常用测试代码添加到此 class 但没有 "test" 前缀,因此 tSQLt 不会 运行他们自动。这些过程需要输入参数,例如要测试的过程的名称等,并且还将包括标准的 tSQLt 断言。
然后在您的过程特定测试中 classes 您只需从测试中调用 TestHelper 版本。
我不确定您的确切用例,但让我们假设这些过程之间的共同因素之一是它们都 return 相同的结果集(但内容不同)并且您想要断言结果集结构是否正确的常见测试。
您可以像这样创建一个辅助程序
create procedure [TestHelpers].[ValidateResultSet]
(
@ProcedureToTest nvarchar(200)
)
as
begin
--! common set up omitted for brevity
exec tSQLt.AssertResultSetsHaveSameMetaData...
end
然后在您的程序测试中 classes 您可能会创建如下所示的测试:
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
我现在无法访问数据库来证明这一点,但它应该可以正常工作,因为我过去做过类似的事情。