실패한 JUnit 테스트 실행: 재실행 솔루션
실패한 JUnit 테스트를 즉시 다시 실행하면 자동화된 테스트 제품군의 안정성을 향상시킬 수 있습니다. 특히 간헐적인 오류를 처리할 때 그렇습니다. 이 기사에서는 이러한 메커니즘을 구현하기 위한 두 가지 접근 방식을 살펴봅니다.
1. TestRule 활용
TestRule은 테스트 실행 흐름을 수정하는 유연한 방법을 제공합니다. TestRule을 사용하여 재실행을 구현하려면 다음을 정의하십시오.
<code class="java">public class Retry implements TestRule { private int retryCount; public Retry(int retryCount) { this.retryCount = retryCount; } public Statement apply(Statement base, Description description) { return statement(base, description); } private Statement statement(final Statement base, final Description description) { return new Statement() { @Override public void evaluate() throws Throwable { Throwable caughtThrowable = null; // Retry loop for (int i = 0; i < retryCount; i++) { try { base.evaluate(); return; } catch (Throwable t) { caughtThrowable = t; System.err.println(description.getDisplayName() + ": run " + (i+1) + " failed"); } } System.err.println(description.getDisplayName() + ": giving up after " + retryCount + " failures"); throw caughtThrowable; } }; } }
재시도 규칙을 사용하여 재시도가 필요한 테스트에 주석을 답니다.
<code class="java">@Rule public Retry retry = new Retry(3); @Test public void test1() { }
2. 사용자 정의 TestRunner 생성
또는 특정 제품군에 대한 테스트 재실행을 처리하도록 사용자 정의 TestRunner를 정의할 수 있습니다. BlockJUnit4ClassRunner를 확장하고 runChild() 메서드를 재정의합니다.
<code class="java">public class CustomTestRunner extends BlockJUnit4ClassRunner { private int retryCount; public CustomTestRunner(Class<?> testClass) { super(testClass); } @Override protected void runChild(final FrameworkMethod method, RunNotifier notifier) { for (int i = 0; i < retryCount; i++) { try { super.runChild(method, notifier); return; } catch (Throwable t) { System.err.println(method.getName() + ": run " + (i+1) + " failed"); } } System.err.println(method.getName() + ": giving up after " + retryCount + " failures"); throw new RuntimeException(); } }</code>
TestRunner 주석을 제품군 클래스에 추가합니다.
<code class="java">@RunWith(CustomTestRunner.class) public class TestSuite { @BeforeClass public static void setUp() { ... } @AfterClass public static void tearDown() { ... } @Test public void test1() { ... } @Test public void test2() { ... } }</code>
두 접근 방식 모두 테스트 재실행을 유연하게 제어할 수 있습니다. JUnit 테스트에서 간헐적인 오류를 처리하는 데 유용한 메커니즘입니다.
위 내용은 테스트 스위트 안정성을 향상시키기 위해 실패한 JUnit 테스트에 대한 재실행 메커니즘을 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!