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.

  1. @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);
    }
}

  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);
    }
}

  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
    }
}

  1. @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
    }
}

  1. @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à
    }
}

  1. @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
        }
    }
}

  1. @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ó
    }
}

  1. @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);
    }
}

  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.

© Copyright 2024. Tots els drets reservats