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
