C# 回归测试的重试属性(NUnit)问题

C# 回归测试的重试属性(NUnit)问题,c#,nunit,C#,Nunit,我们在启动用C#编写的自动测试时遇到了一个问题。我们在文档中使用NUnit和for Retry( )我发现“如果一个测试有一个意外的异常,它不会被保留。只有断言失败才能触发重试。” 问题是我们在其他地方也有问题——在构建测试期间,由于超时、重新启动或测试机器上的更改,没有断言(例如意外异常) 我们使用NUnit3.11 在我们的构建中,300个测试中有1个由于意外异常而失败,构建失败。如果重复测试(针对每个异常),我们可以避免这个问题 [测试,顺序] [重试(MaxRetryCount)] 实

我们在启动用C#编写的自动测试时遇到了一个问题。我们在文档中使用NUnit和for Retry( )我发现“如果一个测试有一个意外的异常,它不会被保留。只有断言失败才能触发重试。” 问题是我们在其他地方也有问题——在构建测试期间,由于超时、重新启动或测试机器上的更改,没有断言(例如意外异常)

我们使用NUnit3.11 在我们的构建中,300个测试中有1个由于意外异常而失败,构建失败。如果重复测试(针对每个异常),我们可以避免这个问题

[测试,顺序] [重试(MaxRetryCount)]

实际: 只有在断言失败后才会重复测试,但问题是我们希望在找到每个异常后重新运行测试(例如MaxRetryCount=4)

预期:
在每次异常后重新运行测试。

尽管您实际上并没有提出问题,但我假设它类似于“鉴于NUnit的工作方式与我想象的不同,我能做些什么?”

通常的答案是,您应该接受导致错误的一个或多个调用,并将其包装在断言中

例如,假设您的测试调用

DoSomethingThatMayNotWork();
在某个深处抛出异常并终止运行。您知道这种情况会间歇性发生,但您更愿意重试,并将
RetryAttribute
放在我们的测试方法上

在这种情况下,将上述内容替换为

Assert.That(() => DoSomethingThatMayNotWork(), Throws.Nothing);
这将把任何未处理的异常转换为失败,并重试测试


您可以通过检查预期的特定异常来优化此测试,这样就不会在诸如NRE之类的测试上重试,这通常是一个编程错误

这里似乎没有问题。:-)