junit
Anpassade testregler
Sök…
Anmärkningar
Det finns fördelar för endera. Att utöka ExternalResource
det bekvämt, särskilt om vi bara behöver en before()
att ställa in något.
Vi bör dock vara medvetna om att eftersom metoden before()
körs utanför try...finally
kommer alla kod som krävs för att rensa upp after()
inte att köras om det finns ett fel under utförande av before()
.
Så här ser det ut i ExternalResource
:
before();
try {
base.evaluate();
} finally {
after();
}
Uppenbarligen, om något undantag kastas i själva testet, eller av en annan kapslad regel, kommer efteråt fortfarande att köras.
Anpassad @ testregler efter implementering
Detta är särskilt användbart om vi har en klass som vi vill utvidga i regeln. Se exempel nedan för en mer bekväm 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 } } } }
Anpassad @TestRule efter förlängning
JUnit har en abstrakt implementering av @TestRule
som låter dig skriva en regel på ett enklare sätt. Detta kallas ExternalResource
och tillhandahåller två skyddade metoder som kan utökas så här:
public class AwesomeTestRule extends ExternalResource { @Override protected void before() { // do your magic } @Override protected void after() { // undo your magic, if needed } }