私はJUnit 4.10をテストスイートの実行に使用していますが、How to Re-run failed JUnit tests immediately?ポストのMatthew Farwellの素晴らしいメモの後に "再試行失敗テスト"ルールを実装しました。テストケース内部のルールとしてこれを使用する場合、それは完璧に動作スイート内のすべてのテストケースにJUnit @Ruleを適用する方法
public class RetryTestRule implements TestRule {
private final int retryCount;
public RetryTestRule(int retryCount) {
this.retryCount = retryCount;
}
@Override
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 logic
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;
}
};
}
}
が、のすべてのテストケースで@Rule表記を使用するために最適ではないようだ:私は、次のコードでクラス「RetryTestRule」を作成しました代わりにスイートの定義における単一表記のスイート、ビットをチェックした後、私は私のスイートクラスの新しい@ClassRule表記を試してみましたので:問題は、予想通り、これは動作しませんです
@RunWith(Suite.class)
@SuiteClasses({
UserRegistrationTest.class,
WebLoginTest.class
})
public class UserSuite {
@ClassRule
public static RetryTestRule retry = new RetryTestRule(2);
}
:失敗したテストが再試行されていません。誰もがこれを試して、解決策を知っていますか?助けが大いにありがとう!
重複している可能性があります:http://stackoverflow.com/questions/7639353/how-to-define-junit-method-rule-in-a-suite – pholser
あなたのユニットテストはランダムに失敗しますか? – Tobb