JUnit ルールを使用して、失敗したテストをすぐに再実行しています。私の追加の要件は、再実行も失敗した場合、同じ理由で失敗したかどうかを判断することです。
これを行うために、この回答のコードを適応させて、失敗の記録を保持し、それらを比較しました。ただし、比較 (.equals) は、同じ理由で失敗したにもかかわらず、常に false と評価されます。これについて最善の方法は何ですか?
private Statement statement(final Statement base, final Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
for (int i = 0; i < retryCount; i++) {
try {
base.evaluate();
return;
} catch (Throwable t) {
System.err.println(description.getDisplayName() + ": run " + (i + 1) + " failed");
// Compare this error with the one before it.
if (errors.size() > 0) {
if (t.equals(errors.get(errors.size() - 1))) {
System.out.println("The error is the same as the previous one!");
} else {
System.out.println("The error is different from the previous one.");
}
}
errors.add(t);
}
}
System.err.println(description.getDisplayName() + ": giving up after " + retryCount
+ " failures");
// Throw most recent error.
throw errors.get(errors.size() - 1);
}
};
}