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
    }

}



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow