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 } }