JUnit では、最初に失敗したテストに 2 回目の合格チャンスを与えるように構成できます。これは、ネットワークの問題やサーバーの応答の遅さなどの外部要因により断続的に失敗する可能性があるテストに特に役立ちます。これを実現するには、次の 2 つの方法があります。
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);
あるいは、runChild() メソッドをオーバーライドするカスタム TestRunner を定義して、各テスト メソッドの実行方法を制御することもできます:
<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>
テスト クラスで、@RunWith を指定してカスタム TestRunner を使用します:
<code class="java">@RunWith(RetryTestRunner.class) @Retry(3) public class MyTestClass {}</code>
以上が失敗した JUnit テストにもう一度合格するチャンスを与えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。