junit
Niestandardowe reguły testowe
Szukaj…
Uwagi
Dla obu są korzyści. Rozszerzenie ExternalResource jest wygodne, zwłaszcza jeśli potrzebujemy tylko funkcji before() aby coś skonfigurować.
Należy jednak pamiętać, że ponieważ metoda before() jest wykonywana poza try...finally , żaden kod, który jest wymagany do wyczyszczenia after() , nie zostanie wykonany, jeśli wystąpi błąd podczas wykonanie before() .
Tak to wygląda w ExternalResource :
before();
try {
base.evaluate();
} finally {
after();
}
Oczywiście, jeśli w samym teście zostanie zgłoszony jakiś wyjątek lub inna zagnieżdżona reguła, po zostanie nadal wykonane.
Niestandardowy @TestRule według implementacji
Jest to szczególnie przydatne, jeśli mamy klasę, którą chcemy rozszerzyć w regule. Zobacz przykład poniżej, aby uzyskać wygodniejszą metodę.
import org.junit.rules.TestRule;
import org.junit.runners.model.Statement;
public class AwesomeTestRule implements TextRule {
@Override
public Statement apply(Statement base, Description description) {
return new AwesomeStatement(base);
}
private static class AwesomeStatement extends Statement {
private Statement base;
public AwesomeStatement(Statement base) {
this.base = base;
}
@Override
public void evaluate() throws Throwable {
try {
// do your magic
base.evaluate(); // this will call Junit to run an individual test
} finally {
// undo the magic, if required
}
}
}
}
Niestandardowy @TestRule według rozszerzenia
JUnit ma abstrakcyjną implementację @TestRule która pozwala pisać reguły w prostszy sposób. Nazywa się to ExternalResource i zapewnia dwie chronione metody, które można rozszerzyć w następujący sposób:
public class AwesomeTestRule extends ExternalResource {
@Override
protected void before() {
// do your magic
}
@Override
protected void after() {
// undo your magic, if needed
}
}