Szukaj…


Uwagi

Dla obu są korzyści. Rozszerzenie ExternalResource jest wygodne, zwłaszcza jeśli potrzebujemy tylko funkcji before() aby coś skonfigurować.

Należy jednak pamiętać, że ponieważ metoda before() jest wykonywana poza try...finally , żaden kod, który jest wymagany do wyczyszczenia after() , nie zostanie wykonany, jeśli wystąpi błąd podczas wykonanie before() .

Tak to wygląda w ExternalResource :

before();
try {
    base.evaluate();
} finally {
    after();
}

Oczywiście, jeśli w samym teście zostanie zgłoszony jakiś wyjątek lub inna zagnieżdżona reguła, po zostanie nadal wykonane.

Niestandardowy @TestRule według implementacji

Jest to szczególnie przydatne, jeśli mamy klasę, którą chcemy rozszerzyć w regule. Zobacz przykład poniżej, aby uzyskać wygodniejszą 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
            }
        }
    }
    
}

Niestandardowy @TestRule według rozszerzenia

JUnit ma abstrakcyjną implementację @TestRule która pozwala pisać reguły w prostszy sposób. Nazywa się to ExternalResource i zapewnia dwie chronione metody, które można rozszerzyć w następujący sposób:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow