在 JUnit 中,可以将测试配置为在最初失败时有第二次机会通过。这对于可能由于外部因素(例如网络问题或服务器响应缓慢)而间歇性失败的测试特别有用。以下是实现此目的的两种方法:
TestRule 允许您定义要在每个测试方法之前和之后执行的自定义逻辑。要创建用于重试失败测试的 TestRule:
<code class="java">public class RetryTestRule implements TestRule { private int retryCount; public RetryTestRule(int retryCount) { this.retryCount = retryCount; } @Override public Statement apply(Statement base, Description description) { return new Statement() { @Override public void evaluate() throws Throwable { Throwable caughtThrowable = null; for (int i = 0; i < retryCount; i++) { try { base.evaluate(); return; } catch (Throwable t) { caughtThrowable = t; } } throw caughtThrowable; } }; } }
在您的测试类中,将规则应用于所需的测试:
<code class="java">@Rule public RetryTestRule retry = new RetryTestRule(3);
或者,您可以定义一个自定义 TestRunner 来重写 runChild() 方法来控制每个测试方法的执行方式:
<code class="java">public class RetryTestRunner extends BlockJUnit4ClassRunner { private int retryCount; public RetryTestRunner(Class<?> testClass) { super(testClass); Annotation annotation = AnnotationUtils.getAnnotation(testClass, Retry.class); if (annotation != null) { retryCount = ((Retry) annotation).value(); } } @Override protected void runChild(FrameworkMethod method, RunNotifier notifier) { for (int i = 0; i < retryCount; i++) { try { super.runChild(method, notifier); return; } catch (Throwable t) { if (i == retryCount - 1) { throw t; } } } } }</code>
在您的测试类中,将自定义 TestRunner 与 @RunWith 一起使用:
<code class="java">@RunWith(RetryTestRunner.class) @Retry(3) public class MyTestClass {}</code>
以上是如何给失败的 JUnit 测试第二次通过的机会?的详细内容。更多信息请关注PHP中文网其他相关文章!