Buscar..


Observaciones

Hay beneficios para cualquiera. Extender ExternalResource es conveniente, especialmente si solo requerimos un before() para configurar algo.

Sin embargo, debemos tener en cuenta que, dado que el método before() se ejecuta fuera del try...finally , cualquier código que se requiera para limpiar after() no se ejecutará si hay un error durante el Ejecución de before() .

Así es como se ve dentro de ExternalResource :

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

Obviamente, si se lanza alguna excepción en la prueba en sí, o por otra regla anidada, aún se ejecutará el siguiente.

Custom @TestRule por implementación

Esto es especialmente útil si tenemos una clase que queremos extender en la regla. Vea el ejemplo a continuación para un método más conveniente.

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 por extensión

JUnit tiene una implementación abstracta de @TestRule que le permite escribir una regla de una manera más sencilla. Esto se llama ExternalResource y proporciona dos métodos protegidos que pueden extenderse de la siguiente manera:

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow