Estoy haciendo la transición de junit4 a junit5 en un proyecto y estoy tratando de descubrir cómo probar los registros. Anteriormente, usé
@Rule OutputCapture outputCapture = new OutputCapture(); y luego escribiría una afirmación usando outputCapture.toString() , por ejemplo
assertThat(outputCapture.toString(),containsString("status=200"));
Dado que la anotación @Rule aún no se ha implementado en junit5, no puedo usar outputCapture. ¿Alguna idea de qué hacer en su lugar? ¡Gracias!
Se proporciona una extensión para lo mismo y puede usarla de la siguiente manera:
@ExtendWith(OutputCaptureExtension.class) public class MyTestClass { @Test void myTestCase(CapturedOutput capturedOutput) { assertTrue(capturedOutput.getOut().contains("expected string")); assertTrue(capturedOutput.getErr().contains("expected string")); } }Nos topamos con el mismo problema durante nuestra migración JUnit5. Después de investigar un poco, encontré una solución técnica, pero no parecía que alguien hubiera hecho una biblioteca de prueba todavía. Así que eso es lo que hice. Está publicado en Maven Central para que pueda usarlo de inmediato:
https://github.com/netmikey/logunit
Puedes usarlo de la siguiente manera:
public class MyModuleTest { @RegisterExtension LogCapturer logs = LogCapturer.create().captureForType(MyModule.class); @Test public void testLogging() { // ... do the testing ... // Run assertions on the logged messages logs.assertContains("Some message"); } }(ver el README del proyecto para más ejemplos)
El consejo de migración de la documentación de JUnit5 establece claramente que:
@Ruley@ClassRuleya no existen; reemplazado por@ExtendWith; consulte la siguiente sección para conocer la compatibilidad con reglas parciales.
Con el fin de utilizar el soporte @Rule existente de JUnit 4 , se sugiere una forma para las anotaciones de nivel de método o clase.
Al igual que en JUnit 4, se admiten campos con anotaciones de reglas y métodos. Al usar estas extensiones de nivel de clase en una clase de prueba, tales implementaciones de reglas en bases de código heredadas se pueden dejar sin cambios, incluidas las declaraciones de importación de reglas JUnit 4.
Esta forma limitada de soporte de reglas se puede activar mediante la anotación de nivel de clase
org.junit.jupiter.migrationsupport.rules.EnableRuleMigrationSupport
Una mejor opción sería rediseñar su conjunto de pruebas para usar el modelo de extensión de JUnit5 si lo está usando.