【问题标题】:How to run the same tsqlt tests on multiple stored procedures?如何在多个存储过程上运行相同的 tsqlt 测试?
【发布时间】:2018-01-25 15:28:06
【问题描述】:

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

有时我想更改其中一个“常用”测试,而我必须在 10 个或更多文件中更改它,这很麻烦。

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

【问题讨论】:

标签: stored-procedures tsqlt


【解决方案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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多