我正在将一个循环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);
}
答案 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}"));