Я использую правило JUnit для немедленного повторного запуска любых неудачных тестов. Мое дополнительное требование заключается в том, что если повторный запуск также завершился неудачей, определите, не удалось ли они по той же причине.Каков правильный способ сравнить два комбайна?
Для этого я скорректировал код от this answer, чтобы сохранить записи об ошибках и сравнить их. Однако сравнение (.equals) всегда оценивается как ложное, несмотря на то, что они не работают по той же причине. Каков наилучший способ сделать это?
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);
}
};
}
В чем заключается причина, по которой вы хотите сравнить их? Что должно быть «по той же причине»? (Одинаковые строки стека? Тот же оператор 'throw'? Идентичные аргументы метода, вызвавшие сбой?) Правильный способ может быть многого. – Radiodef
Если ваши тесты могут не работать по разным причинам без изменения кода, они не очень надежны – nicopico