在 tSQLt 中获取 Nunit 样式的 TestCase() 功能的任何解决方案?

Any solutions to getting Nunit style TestCase() functionality in tSQLt?

我目前正在寻找使用 tSQLt.

为某些 SQL 服务器 SQL 代码编写一些单元测试

阅读文档后,似乎不支持能够调用带有参数的测试用例,而不是为每个参数组合编写单独的测试用例。 (为了这个问题,请抛开你认为将参数传递给测试用例还是为每个参数组合单独编写一个好主意)

例如在NUnit you can do something as follows using the TestCase属性中:

[TestCase("", -1, false)]
[TestCase("ACT ", 1, true)]
[TestCase("ACT", 1, true)]
[TestCase("aCT", 1, true)]
[TestCase("AUSTRALIAN CAPITAL TERRITORY", 1, true)]
[Test]
public void DetermineStateIdFromText(string aStateText, long aExpectedStateId, bool aExpectedFound)
{
    //Arrange
    WzDetermineStateIdFromTextInput input = new WzDetermineStateIdFromTextInput
                                            {
                                                StateText = aStateText
                                            };

    //Act
    WzDetermineStateIdFromTextOutput output = _WzLocationMappingService.DetermineStateIdFromText(input);

    //Assert
    output.ResultSuccess.ShouldBeTrue();
    output.Found.ShouldBe(aExpectedFound);
    if (output.Found)
    {
        output.StateId.ShouldBe(aExpectedStateId);
    }
}

(测试方法的内容无关紧要,包含在内只是为了完整性。ShouldBe() 调用来自 Shouldly,以防您想知道断言在哪里。)

有没有人有任何在 tSQLt 内提供 TestCase 样式支持的解决方案?

tSQLt 允许在测试 类 中使用不是测试用例的存储过程。因此,为了实现您正在寻找的东西,我通常会创建一个存储过程来接受参数并处理所有测试逻辑。然后我写了一堆单行测试程序,调用另一个程序传递适当的参数。在 tSQLt 本身的测试用例中有几个例子。

与真正的参数化测试相比,这种方法的缺点很少,但有一个很大的优点:您可以为每个案例赋予一个真正有意义的名称,这将使查找问题变得更加简单。 (真正的参数化测试在积压中,但它们不是最高优先级,因此它们可能需要一段时间才能完成。)

附带说明一下,我强烈建议不要自动生成测试甚至测试参数,因为这通常会导致更高的维护成本。由于测试的目标是降低维护代码库的成本,这会适得其反。我已经看到很多单元测试采用项目都因为这个原因而失败。