在 NUnit 中重复 [TestCase] 100 次

b15*_*b15 4 nunit unit-testing webtest repeat

我正在将循环 100 次(触发请求并验证响应 100 次)的 Webtest 转换为 NUnit。看来该[Repeat]属性仅适用于[Test][TestCase]或任何其他装饰/属性。最干净的方法是什么?我想用这些参数触发一个测试用例 100 次,并且我想在不loopCount向我的测试用例添加参数并将我的 act 和 assert 部分嵌套在 for 循环中的情况下执行此操作。

下面的代码只运行一次。

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

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

    //Assert
    AssertStuff(arg1, arg2);
}
Run Code Online (Sandbox Code Playgroud)

Stu*_*tLC 5

从 Repeat 的在线NUnit 文档来看,这种行为似乎是故意的。

笔记:

目前无法在 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);
}
Run Code Online (Sandbox Code Playgroud)

但对于同样的价格,你不妨稍微改变一下论点?,例如

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