[vc_row][vc_column][vc_column_text]JUnit es el marco de pruebas más popular en Java, y con las pruebas de JUnit 5 en Java 8 y más, da un paso más. Esta versión se lanzo en septiembre del 2017 y se ha actualizado activamente para corregir errores y agregar nuevas funciones. Además, JUnit 5 también es compatible con las versiones 3 y 4 al agregar junit-vintage-engine a tu ruta de acceso de clase.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Migración desde JUnit 4
Al realizar la migración de JUnit 4 se debe tener ciertas consideraciones en mente:
- Para tener las anotaciones de JUnit 5, se requiere agregar junit-jupiter-api al classpath.
- Reemplazar las anotaciones @BeforeClass, @Before, @AfterClass y @After, con las anotaciones @BeforeAll, @BeforeEach, @AfterAll, y @AfterEach.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | @BeforeAll static void initAll(){ LOGGER.info("@BeforeAll runs once before all tests"); } @BeforeEach void init(){ LOGGER.info("@BeforeEach runs before each test"); } @AfterAll static void tearDownAll(){ LOGGER.info("@AfterAll runs once after all tests"); } @AfterEach void tearDown(){ LOGGER.info("@AfterEach runs after each test"); } |
- Reemplazar @Ignore con @Disabled. JUnit 5 también proporciona un filtro más potente para ignorar o deshabilitar las pruebas de las expresiones de JavaScript, el sistema operativo, la versión de Java o las propiedades del sistema.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @Test @Disabled("Disabled test (it used to be @Ignore in jUnit4)") void skippedTest(){ // not executed } @Test @EnabledIf(value = "true", reason = "test runs because it is true") void isExecuted(){ } @DisabledIf("Math.random() ) @RepeatedTest(10) void sometimesIsExecuted(){ System.out.println("Running " + counter++); } |
- @Category necesita ser remplazado con @Tags
1 2 3 4 5 6 7 | @Tag("myTestSuite") class TagsTests{ @Test @Tag("myTest") void tagExample(){ } } |
- @RunWith no existe más, se debe utilizar @ExtendWith en su lugar.
- @Rule y @ClassRule también han sido removidos, utilizar @ExtendWith en su lugar
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Nuevas funcionalidades de JUnit 5
@DisplayName
@DisplayName le permite anular una clase o método de prueba con un mensaje personalizado, caracteres especiales o incluso emojis.
1 2 3 4 5 6 7 8 9 10 11 | @DisplayName("Display name test suite") class DisplayNamesTests{ @Test @DisplayName("My Custom Test Name") void displayNameTest(){ } @Test @DisplayName("\uD83D\uDE03")// Happy Emoji void displayEmojiTest(){ } } |
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Assertions
Se incluyen las siguiente mejoras en las Assertions:
- Compatibilidad con las expresiones lambda
1 | assertEquals(Stream.of(1,4,5).mapToInt(Integer::intValue).sum(), 10, "Sum should be 10"); |
- Assertions agrupadas: assertAll()
1 2 3 4 5 | ListString> names = Arrays.asList("Sergio","Juan","Peter"); assertAll("names", ()-> assertEquals("Sergio", names.get(0)), ()-> assertEquals("Juan", names.get(1)), ()-> assertEquals("Adolfo", names.get(2))); |
- assertThrows(): Con esta Assertion, se tiene más control sobre las excepciones, ahora, incluso puede inspeccionar la excepción de retorno para verificar el mensaje, la causa y realizar el seguimiento de pila.
1 2 3 4 | Throwable runtimeException = assertThrows(RuntimeException.class,()->{ throw newRuntimeException("exception"); }); assertEquals("exception", runtimeException.getMessage()); |
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Este artículo se encuentra basado en Take Unit Testing to the Next Level With JUnit 5, en un siguiente artículo continuamos con la migración a JUnit 5.[/vc_column_text][/vc_column][/vc_row]