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
    }

}



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow