我当前正在使用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本身的测试用例中,有一些例子。
这种方法在真正的参数化测试上几乎没有缺点,但是一个很大的优势:您可以给每个案例一个真正有意义的名称,这将使狩猎问题变得更加简单。(真正的参数化测试在积压列表上,但它们不是最高优先级,因此可能需要一段时间。)
作为旁注,我强烈建议不要进行自动化测试甚至测试参数,因为这通常会导致更高的维护成本。由于测试的目的是降低维护代码库的成本,这是适得其反的。由于这个原因,我已经看到很多单位测试的收养项目失败了。