Els tests parametritzats permeten executar el mateix test amb diferents conjunts de dades. Això és especialment útil quan es vol provar una funció amb múltiples valors d'entrada i verificar que el resultat sigui correcte per a cadascun d'ells. En aquest tema, aprendrem com crear tests parametritzats amb JUnit.

  1. Introducció als Tests Parametritzats

Què són els Tests Parametritzats?

Els tests parametritzats són una manera d'executar el mateix test diverses vegades amb diferents dades d'entrada. Això ajuda a reduir la duplicació de codi i a assegurar que la funció es comporta correctament amb una varietat de dades.

Beneficis dels Tests Parametritzats

  • Reducció de la duplicació de codi: No cal escriure múltiples tests per a cada conjunt de dades.
  • Millora de la cobertura de tests: Permet provar una funció amb una àmplia gamma de valors d'entrada.
  • Mantenibilitat: Facilita l'actualització dels tests, ja que només cal modificar un únic test parametritzat en lloc de múltiples tests individuals.

  1. Configuració de Tests Parametritzats

Dependències Necessàries

Per utilitzar tests parametritzats amb JUnit, assegura't de tenir les següents dependències al teu projecte:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.8.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <version>5.8.1</version>
    <scope>test</scope>
</dependency>

  1. Creant un Test Parametritzat

Exemple Bàsic

A continuació, es mostra un exemple bàsic de com crear un test parametritzat amb JUnit:

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class ParameterizedTestExample {

    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3, 4, 5})
    void testIsEven(int number) {
        assertEquals(0, number % 2);
    }
}

Explicació del Codi

  • @ParameterizedTest: Aquesta anotació indica que el mètode és un test parametritzat.
  • @ValueSource: Proporciona una font de valors per al test. En aquest cas, una llista de números enters.
  • testIsEven: Aquest mètode es cridarà una vegada per a cada valor proporcionat per @ValueSource.

Utilitzant Múltiples Fonts de Dades

També es poden utilitzar múltiples fonts de dades per als tests parametritzats. Aquí hi ha un exemple que utilitza @CsvSource per proporcionar múltiples conjunts de dades:

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

public class CsvSourceExample {

    @ParameterizedTest
    @CsvSource({
        "1, 2, 3",
        "4, 5, 9",
        "7, 8, 15"
    })
    void testAddition(int a, int b, int expectedSum) {
        assertEquals(expectedSum, a + b);
    }
}

Explicació del Codi

  • @CsvSource: Proporciona múltiples conjunts de dades en format CSV (Comma-Separated Values).
  • testAddition: Aquest mètode es cridarà una vegada per a cada conjunt de dades proporcionat per @CsvSource.

  1. Exercicis Pràctics

Exercici 1: Test de Multiplicació

Crea un test parametritzat que verifiqui la multiplicació de dos números. Utilitza @CsvSource per proporcionar els conjunts de dades.

Solució

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

public class MultiplicationTest {

    @ParameterizedTest
    @CsvSource({
        "2, 3, 6",
        "4, 5, 20",
        "6, 7, 42"
    })
    void testMultiplication(int a, int b, int expectedProduct) {
        assertEquals(expectedProduct, a * b);
    }
}

Exercici 2: Test de Concatenació de Strings

Crea un test parametritzat que verifiqui la concatenació de dos strings. Utilitza @CsvSource per proporcionar els conjunts de dades.

Solució

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

public class StringConcatenationTest {

    @ParameterizedTest
    @CsvSource({
        "'Hello', 'World', 'HelloWorld'",
        "'JUnit', '5', 'JUnit5'",
        "'Parameterized', 'Test', 'ParameterizedTest'"
    })
    void testStringConcatenation(String str1, String str2, String expectedResult) {
        assertEquals(expectedResult, str1 + str2);
    }
}

  1. Conclusió

Els tests parametritzats són una eina poderosa per millorar la cobertura de tests i reduir la duplicació de codi. En aquest tema, hem après com crear tests parametritzats utilitzant JUnit, incloent l'ús de @ValueSource i @CsvSource per proporcionar dades d'entrada. També hem vist exemples pràctics i exercicis per reforçar els conceptes apresos.

En el següent tema, explorarem com utilitzar l'anotació @ParameterizedTest per crear tests parametritzats més avançats.

© Copyright 2024. Tots els drets reservats