junit
Aangepaste testregels
Zoeken…
Opmerkingen
Er zijn voordelen voor beide. ExternalResource
uitbreiden is handig, vooral als we alleen een before()
nodig hebben om iets in te stellen.
We moeten echter beseffen dat, omdat de methode before()
wordt uitgevoerd buiten de try...finally
, elke code die nodig is om op te ruimen after()
niet wordt uitgevoerd als er een fout optreedt tijdens de uitvoering van before()
.
Dit is hoe het eruit ziet in ExternalResource
:
before();
try {
base.evaluate();
} finally {
after();
}
Als er een uitzondering wordt gemaakt in de test zelf, of door een andere geneste regel, wordt het vervolg natuurlijk nog steeds uitgevoerd.
Custom @TestRule door implementatie
Dit is vooral handig als we een klasse hebben die we in de regel willen uitbreiden. Zie het onderstaande voorbeeld voor een gemakkelijkere 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 per extensie
JUnit heeft een abstracte implementatie van @TestRule
waarmee u een regel eenvoudiger kunt schrijven. Dit wordt ExternalResource
en biedt twee beveiligde methoden die op deze manier kunnen worden uitgebreid:
public class AwesomeTestRule extends ExternalResource { @Override protected void before() { // do your magic } @Override protected void after() { // undo your magic, if needed } }