JUnit 5 introdueix una sèrie de noves anotacions que milloren la flexibilitat i la funcionalitat dels tests. Aquestes anotacions permeten una millor organització i execució dels tests, així com una major personalització. A continuació, explorarem les noves anotacions més importants de JUnit 5.
- @Test
La nova anotació @Test
en JUnit 5 és similar a la de JUnit 4, però amb algunes millores. Ara permet especificar condicions sota les quals un test ha de ser desactivat.
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class ExampleTest { @Test void simpleTest() { assertEquals(2, 1 + 1); } }
- @DisplayName
L'anotació @DisplayName
permet assignar un nom personalitzat a un test, fent que els informes de test siguin més llegibles.
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class ExampleTest { @Test @DisplayName("Test per sumar dos nombres") void additionTest() { assertEquals(2, 1 + 1); } }
- @BeforeEach i @AfterEach
Les anotacions @BeforeEach
i @AfterEach
substitueixen @Before
i @After
de JUnit 4. S'executen abans i després de cada test, respectivament.
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; public class ExampleTest { @BeforeEach void setUp() { // Configuració abans de cada test } @AfterEach void tearDown() { // Neteja després de cada test } @Test void simpleTest() { // Test } }
- @BeforeAll i @AfterAll
Les anotacions @BeforeAll
i @AfterAll
substitueixen @BeforeClass
i @AfterClass
de JUnit 4. S'executen una vegada abans i després de tots els tests de la classe, respectivament. Els mètodes anotats amb aquestes anotacions han de ser estàtics.
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; public class ExampleTest { @BeforeAll static void initAll() { // Configuració abans de tots els tests } @AfterAll static void tearDownAll() { // Neteja després de tots els tests } @Test void simpleTest() { // Test } }
- @Disabled
L'anotació @Disabled
substitueix @Ignore
de JUnit 4. Permet desactivar tests que no es volen executar temporalment.
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; public class ExampleTest { @Test @Disabled("Desactivat fins que es resolgui el bug #123") void skippedTest() { // Aquest test no s'executarà } }
- @Nested
L'anotació @Nested
permet crear classes de test internes, organitzant millor els tests relacionats.
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; public class ExampleTest { @Nested class InnerTest { @Test void innerTest() { // Test dins de la classe interna } } }
- @Tag
L'anotació @Tag
permet etiquetar tests per a la seva classificació i execució selectiva.
import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; public class ExampleTest { @Test @Tag("unit") void unitTest() { // Test de unitat } @Test @Tag("integration") void integrationTest() { // Test d'integració } }
- @RepeatedTest
L'anotació @RepeatedTest
permet executar un test diverses vegades.
import org.junit.jupiter.api.RepeatedTest; import static org.junit.jupiter.api.Assertions.assertEquals; public class ExampleTest { @RepeatedTest(5) void repeatedTest() { assertEquals(2, 1 + 1); } }
- @ParameterizedTest
L'anotació @ParameterizedTest
permet executar un test amb diferents valors d'entrada.
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import static org.junit.jupiter.api.Assertions.assertTrue; public class ExampleTest { @ParameterizedTest @ValueSource(strings = {"racecar", "radar", "level"}) void palindromes(String candidate) { assertTrue(isPalindrome(candidate)); } boolean isPalindrome(String str) { return str.equals(new StringBuilder(str).reverse().toString()); } }
Resum
Les noves anotacions de JUnit 5 ofereixen una major flexibilitat i funcionalitat per a l'escriptura de tests. Aquestes anotacions permeten una millor organització, personalització i execució dels tests, facilitant el desenvolupament de codi de qualitat. En el proper tema, explorarem com migrar de JUnit 4 a JUnit 5, aprofitant aquestes noves funcionalitats.
Curs de JUnit
Mòdul 1: Introducció a JUnit
Mòdul 2: Anotacions Bàsiques de JUnit
- Entenent @Test
- Utilitzant @Before i @After
- Utilitzant @BeforeClass i @AfterClass
- Ignorant Tests amb @Ignore
Mòdul 3: Assertions a JUnit
Mòdul 4: Tests Parametritzats
- Introducció als Tests Parametritzats
- Creant Tests Parametritzats
- Utilitzant @ParameterizedTest
- Tests Parametritzats Personalitzats
Mòdul 5: Suites de Test
Mòdul 6: Mocking amb JUnit
Mòdul 7: Funcions Avançades de JUnit
Mòdul 8: Millors Pràctiques i Consells
- Escrivint Tests Efectius
- Organitzant el Codi de Test
- Desenvolupament Guiat per Tests (TDD)
- Integració Contínua amb JUnit