在NUnit中重复[TestCase] 100次

时间:2014-07-15 15:20:15

标签: unit-testing nunit repeat webtest

我正在将一个循环100次的webtest(触发请求并验证响应100次)转换为NUnit。似乎[Repeat]属性仅适用于[Test],而不适用于[TestCase]或任何其他装饰/属性。最干净的方法是什么?我想用这些参数触发一个测试用例100次,我想在没有向我的测试用例中添加loopCount参数并在for循环中嵌套我的act和断言部分的情况下这样做。

以下代码只运行一次。

[TestCase("arg1", "arg2"), Repeat(100)]
public void testing(string arg1, string arg2)
{
    //Arrange

    //Act
    var response = RequestSender.SendGetRequest();

    //Assert
    AssertStuff(arg1, arg2);
}

1 个答案:

答案 0 :(得分:4)

从在线NUnit documentation for Repeat看来,这种行为是故意的。

  

注意:

     

目前无法在TestFixture或任何其他类型的测试套件上使用RepeatAttribute。只能进行单次测试。   由于参数化测试方法表示套件,因此当RepeatAttribute出现在这样的方法上时会被忽略。

假设TestCase显然被视为参数化测试。循环看起来是不可避免的,没有一些额外的定制?

您可以做的是使用测试用例源并为其提供100个重复项目:

private static readonly IEnumerable<Tuple<string, string>> _oneHundredCases = 
  Enumerable.Range(0, 100)
   .Select(_ => Tuple.Create("arg1", "arg2"));

[TestCaseSource(nameof(_oneHundredCases))]
public void testing(Tuple<string, string> theArgs)
{
    ...
    AssertStuff(theArgs.Item1, theArgs.Item2);
}

但是以相同的价格,您可以稍微改变一下这些论点,例如

_oneHundredCases = 
  Enumerable.Range(0, 100)
   .Select(n => Tuple.Create(n.ToString(), $"arg{n}"));