首頁 >Java >java教程 >如何給失敗的 JUnit 測試第二次通過的機會?

如何給失敗的 JUnit 測試第二次通過的機會?

Susan Sarandon
Susan Sarandon原創
2024-10-29 06:35:021008瀏覽

How Can I Give Failing JUnit Tests a Second Chance to Pass?

再次執行失敗的 JUnit 測試

在 JUnit 中,可以將測試配置為在最初失敗時有第二次機會通過。這對於可能由於外部因素(例如網路問題或伺服器響應緩慢)而間歇性失敗的測試特別有用。以下是實現此目的的兩種方法:

使用 TestRule

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

或者,您可以定義一個自訂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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn