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