제안 된 의견은 일부 추가 사항과 함께이 기사를 기반으로 작성되었습니다 .
여기에서 jUnit 프로젝트의 일부 테스트 케이스가 "실패"또는 "오류"결과를 가져 오면이 테스트 케이스가 한 번 더 다시 실행됩니다. 여기에서 우리는 성공 결과를 얻을 수있는 3 개의 기회를 설정했습니다.
그래서, 우리는해야 할 규칙 클래스를 생성 하고 테스트 클래스에 "@Rule"알림을 추가합니다 .
각 테스트 클래스에 대해 동일한 "@Rule"알림을 작성하지 않으려면 추상 SetProperty 클래스 (있는 경우)에 추가하고 확장 할 수 있습니다.
규칙 클래스 :
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
public class RetryRule implements TestRule {
private int retryCount;
public RetryRule (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;
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;
}
};
}
}
테스트 클래스 :
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
public class RetryRuleTest {
static WebDriver driver;
final private String URL = "http://www.swtestacademy.com";
@BeforeClass
public static void setupTest(){
driver = new FirefoxDriver();
}
@Rule
public RetryRule retryRule = new RetryRule(3);
@Test
public void getURLExample() {
driver.get(URL);
assertThat(driver.getTitle(), is("WRONG TITLE"));
}
}