Quiero escribir casos de prueba para una gran cantidad de código, me gustaría conocer los detalles de la @Rule
función de anotación JUnit , para poder usarlo para escribir casos de prueba. Proporcione algunas buenas respuestas o enlaces, que brinden una descripción detallada de su funcionalidad a través de un ejemplo simple.
java
junit
junit4
junit-rule
Dipak
fuente
fuente
@Rule
bastante bien, especialmente echa un vistazo a la última sección "La secuencia de eventos en detalle"Respuestas:
Las reglas se utilizan 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@After
. Usar un enExternalResource
lugar de@Before
y@After
da oportunidades para una mejor reutilización del código; Se puede usar la misma regla de dos clases de prueba diferentes.El diseño se basó en: interceptores en JUnit
Para obtener más información, consulte JUnit wiki: Reglas .
fuente
Las reglas de Junit funcionan según el principio de AOP (programación orientada a aspectos). Intercepta el método de prueba, lo que brinda 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:
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 lista para usar proporcionada por Junit.
También se puede lograr un comportamiento similar creando nuestras propias reglas. Junit proporciona la interfaz TestRule, que se puede implementar para crear nuestra propia regla Junit.
Aquí hay un enlace útil para referencia:
fuente
tl; dr por cómo funciona: JUnit envuelve su método de prueba en un objeto de declaración, por lo que la declaración. Execute () ejecuta su prueba. Luego, en lugar de llamar a la instrucción. Execute () directamente para ejecutar su prueba, JUnit pasa la instrucción a un TestRule con la anotación @Rule. La función "aplicar" de TestRule devuelve una nueva Declaración dada la Declaración con su prueba. El nuevo método Execute () de la instrucción puede llamar al método de ejecución de la instrucción de prueba (o no, o llamarlo varias veces) y hacer lo que quiera antes y después. Ahora JUnit tiene una nueva instrucción que hace más que simplemente ejecutar la prueba, y puede pasarla nuevamente a otras reglas antes de finalmente llamar a Ejecutar.
fuente
Las reglas se utilizan para mejorar el comportamiento de cada método de prueba de forma genérica. La regla Junit intercepta el método de prueba y nos permite hacer algo antes de que un método de prueba comience la ejecución y después de que se haya ejecutado un método de prueba.
Por ejemplo, usando la regla @Timeout podemos establecer el tiempo de espera para todas las pruebas.
La regla @TemporaryFolder se usa para crear carpetas temporales, archivos. Cada vez que se ejecuta el método de prueba, se crea una carpeta temporal y se elimina después de la ejecución del método.
Puede ver ejemplos de algunas reglas integradas proporcionadas por junit en este enlace .
fuente