首页 > 解决方案 > 回归测试的重试属性 (NUnit) 问题

问题描述

我们在启动用 C# 编写的自动测试时遇到了一个问题。我们在文档( https://github.com/nunit/docs/wiki/Retry-Attribute )中使用 NUnit 和 Retry, 我发现“如果测试有意外异常,则不会保留它。只有断言失败才能触发重试。问题是我们在其他地方遇到了问题——没有断言(例如意外异常),因为在构建测试期间测试机器上的超时、重新启动或更改。

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

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

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

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

标签: c#nunit

解决方案


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

通常的答案是您应该接受导致错误的调用(或调用)并将其(它们)包装在断言中。

例如,假设您的测试调用

DoSomethingThatMayNotWork();

在某个深处引发异常并终止运行。您知道这种情况会间歇性发生,但您更愿意重试并已将其RetryAttribute放在我们的测试方法中。

在这种情况下,将上面的内容替换为类似

Assert.That(() => DoSomethingThatMayNotWork(), Throws.Nothing);

这会将任何未处理的异常转换为失败,并且将重试测试。

您可以通过检查您期望的特定异常来改进这一点,这样测试就不会在 NRE 之类的东西上重试,这通常是一个编程错误。


推荐阅读