In JUnit ist es möglich, Tests so zu konfigurieren, dass sie eine zweite Chance zum Bestehen haben, wenn sie zunächst fehlschlagen. Dies kann besonders nützlich sein für Tests, die aufgrund externer Faktoren wie Netzwerkproblemen oder langsamer Serverantworten zeitweise fehlschlagen können. Hier sind zwei Methoden, um dies zu erreichen:
Mit einer Testregel können Sie benutzerdefinierte Logik definieren, die vor und nach jeder Testmethode ausgeführt wird. So erstellen Sie eine Testregel zum Wiederholen fehlgeschlagener Tests:
<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; } }; } }
Wenden Sie in Ihrer Testklasse die Regel auf die gewünschten Tests an:
<code class="java">@Rule public RetryTestRule retry = new RetryTestRule(3);
Alternativ können Sie einen benutzerdefinierten TestRunner definieren, der die runChild()-Methode überschreibt, um zu steuern, wie jede Testmethode ausgeführt wird:
<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>
Verwenden Sie in Ihrer Testklasse den benutzerdefinierten TestRunner mit @RunWith:
<code class="java">@RunWith(RetryTestRunner.class) @Retry(3) public class MyTestClass {}</code>
Das obige ist der detaillierte Inhalt vonWie kann ich nicht bestandenen JUnit-Tests eine zweite Chance zum Bestehen geben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!