在TSQLT中获取Nunit样式testcase()功能的任何解决方案



我当前正在使用TSQLT。

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

例如,在Nunit中,您可以使用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);
    }
}

(测试方法的肠道无关紧要,仅包括完整性。应该()呼叫来自应该的,以防万一您想知道断言在哪里。)

是否有人有任何解决方案来提供TSQLT中的测试柜样式支持?

tsqlt允许使用在测试类中不是测试案例的存储过程。因此,为了实现,您要寻找的是,我通常会创建一个存储过程,该过程接受参数并处理所有测试逻辑。然后,我编写了一堆单行测试过程,以调用其他过程中的其他过程。在TSQLT本身的测试用例中,有一些例子。

这种方法在真正的参数化测试上几乎没有缺点,但是一个很大的优势:您可以给每个案例一个真正有意义的名称,这将使狩猎问题变得更加简单。(真正的参数化测试在积压列表上,但它们不是最高优先级,因此可能需要一段时间。)

作为旁注,我强烈建议不要进行自动化测试甚至测试参数,因为这通常会导致更高的维护成本。由于测试的目的是降低维护代码库的成本,这是适得其反的。由于这个原因,我已经看到很多单位测试的收养项目失败了。

相关内容

最新更新