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
    }

}



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow