c# - 回归测试的重试属性 (NUnit) 问题
问题描述
我们在启动用 C# 编写的自动测试时遇到了一个问题。我们在文档( https://github.com/nunit/docs/wiki/Retry-Attribute )中使用 NUnit 和 Retry, 我发现“如果测试有意外异常,则不会保留它。只有断言失败才能触发重试。问题是我们在其他地方遇到了问题——没有断言(例如意外异常),因为在构建测试期间测试机器上的超时、重新启动或更改。
我们使用 NUnit 3.11 在我们的构建中,300 个测试中有 1 个由于意外异常而失败,构建失败。如果要重复测试(对于每个异常),我们可以避免这个问题。
[测试,顺序] [重试(MaxRetryCount)] .....
实际:仅在断言失败后重复测试,但问题是我们希望在找到每个异常后重新运行它们(例如 MaxRetryCount=4)。
预期:每次异常后重新运行测试。
解决方案
尽管您实际上并没有提出问题,但我假设它类似于“鉴于 NUnit 不像我想象的那样工作,我能做些什么呢?”
通常的答案是您应该接受导致错误的调用(或调用)并将其(它们)包装在断言中。
例如,假设您的测试调用
DoSomethingThatMayNotWork();
在某个深处引发异常并终止运行。您知道这种情况会间歇性发生,但您更愿意重试并已将其RetryAttribute
放在我们的测试方法中。
在这种情况下,将上面的内容替换为类似
Assert.That(() => DoSomethingThatMayNotWork(), Throws.Nothing);
这会将任何未处理的异常转换为失败,并且将重试测试。
您可以通过检查您期望的特定异常来改进这一点,这样测试就不会在 NRE 之类的东西上重试,这通常是一个编程错误。
推荐阅读
- python-3.x - 如何使用 kivymd 创建启动画面
- python - 字典理解中的条件表达式
- java - 在 java 中声明 String 时显示 java.lang.String 问题
- node.js - 仅更新 cloudinary 节点 js 中的特定图像
- discord.js - 在 discord.js 中清除“x”个用户或数量的消息
- reactjs - redux-toolkit:在哪里调度一个动作?
- c++ - 为什么要添加第二个地图元素要进行三个比较?
- spring-boot - 具有第二个实体条件的 HQL 映射查询不起作用
- python - 在一行中调用一个类中的顺序函数?
- python - 如何从 random.sample 的输出中删除括号、引号和逗号(使用 python 制作的不和谐机器人)