test runwith que libreria example componente java junit junit4 junit-rule

runwith - test en java



¿Cómo funciona Junit @Rule? (4)

Encontré bastante bien este artículo @Rule , especialmente revisa la última sección "La secuencia de eventos en detalle"

Quiero escribir casos de prueba para una gran cantidad de código, me gustaría conocer detalles de la @Rule anotación JUnit @Rule , para que pueda usarla para escribir casos de prueba. Proporcione algunas buenas respuestas o enlaces, que ofrecen una descripción detallada de su funcionalidad a través de un ejemplo simple.


Junit Rules funciona según el principio de AOP (programación orientada a aspectos). Se intercepta el método de prueba, proporcionando así la oportunidad de hacer algunas cosas antes o después de la ejecución de un método de prueba en particular.

Tome el ejemplo del siguiente código:

public class JunitRuleTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); @Test public void testRule() throws IOException { File newFolder = tempFolder.newFolder("Temp Folder"); assertTrue(newFolder.exists()); } }

Cada vez que se ejecuta el método de prueba anterior, se crea una carpeta temporal y se elimina después de la ejecución del método. Este es un ejemplo de una regla out-of-box proporcionada por Junit.

Comportamiento similar también se puede lograr creando nuestras propias reglas. Junit proporciona la interfaz TestRule, que se puede implementar para crear nuestra propia regla de Junit.

Aquí hay algunos enlaces útiles para referencia:


Las reglas se usan para agregar funcionalidad adicional que se aplica a todas las pruebas dentro de una clase de prueba, pero de una manera más genérica.

Por ejemplo, ExternalResource ejecuta código antes y después de un método de prueba, sin tener que usar @Before y @Before . El uso de ExternalResource lugar de @Before y @Before brinda oportunidades para una mejor reutilización del código; la misma regla se puede usar desde dos clases de prueba diferentes.

El diseño se basó en: interceptores en JUnit

Para más información, consulte JUnit wiki: Reglas .


tl; dr de cómo funciona: JUnit ajusta su método de prueba en un objeto Statement para que statement.Execute () ejecute su prueba. Entonces, en lugar de llamar a statement.Execute () directamente para ejecutar su prueba, JUnit pasa el Statement a una TestRule con la anotación @Rule. La función "aplicar" de TestRule devuelve un nuevo enunciado dado el enunciado con su prueba. El método Execute () del nuevo extracto de cuenta puede invocar el método de ejecución del extracto de prueba (o no, o llamarlo varias veces) y hacer lo que quiera antes y después. Ahora JUnit tiene una nueva Declaración que hace más que simplemente ejecutar la prueba, y puede volver a pasar eso a cualquier otra regla antes de llamar finalmente a Execute.