在 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中文網其他相關文章!