junit
Benutzerdefinierte Testregeln
Suche…
Bemerkungen
Es gibt Vorteile für beide. ExternalResource
ist praktisch, vor allem wenn wir nur ein before()
benötigen, um etwas einzurichten.
Da die Methode before()
außerhalb von try...finally
ausgeführt wird, sollten wir uns jedoch bewusst sein, dass Code, der zum Reinigen von after()
erforderlich ist, nicht ausgeführt wird, wenn während des Befehls ein Fehler auftritt Ausführung von before()
.
So sieht es in ExternalResource
:
before();
try {
base.evaluate();
} finally {
after();
}
Wenn eine Ausnahme im Test selbst oder durch eine andere verschachtelte Regel ausgelöst wird, wird das after natürlich immer noch ausgeführt.
Custom @TestRule nach Implementierung
Dies ist besonders nützlich, wenn wir eine Klasse haben, die wir in der Regel erweitern möchten. Siehe Beispiel unten für eine bequemere Methode.
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 } } } }
Custom @TestRule nach Erweiterung
JUnit verfügt über eine abstrakte Implementierung von @TestRule
, mit der Sie eine Regel einfacher schreiben können. Dies wird als ExternalResource
und bietet zwei geschützte Methoden, die folgendermaßen erweitert werden können:
public class AwesomeTestRule extends ExternalResource { @Override protected void before() { // do your magic } @Override protected void after() { // undo your magic, if needed } }