En aquest tema, aprendrem a utilitzar les anotacions @Before i @After de JUnit. Aquestes anotacions són fonamentals per preparar l'entorn abans de l'execució dels tests i per netejar-lo després de la seva execució. Això ens permet assegurar que cada test s'executa en un entorn controlat i consistent.

Què són @Before i @After?

  • @Before: Aquesta anotació s'utilitza per marcar un mètode que s'executarà abans de cada test. És ideal per inicialitzar recursos que es necessiten per als tests.
  • @After: Aquesta anotació s'utilitza per marcar un mètode que s'executarà després de cada test. És útil per alliberar recursos o netejar l'entorn de test.

Exemple Pràctic

A continuació, veurem un exemple pràctic que il·lustra com utilitzar @Before i @After en un test de JUnit.

import org.junit.Before;
import org.junit.After;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class CalculadoraTest {

    private Calculadora calculadora;

    @Before
    public void setUp() {
        // Aquest mètode s'executa abans de cada test
        calculadora = new Calculadora();
        System.out.println("Iniciant un nou test...");
    }

    @After
    public void tearDown() {
        // Aquest mètode s'executa després de cada test
        calculadora = null;
        System.out.println("Test finalitzat.");
    }

    @Test
    public void testSuma() {
        int resultat = calculadora.suma(2, 3);
        assertEquals(5, resultat);
    }

    @Test
    public void testResta() {
        int resultat = calculadora.resta(5, 3);
        assertEquals(2, resultat);
    }
}

Explicació del Codi

  1. Declaració de la Classe i Variables:

    public class CalculadoraTest {
        private Calculadora calculadora;
    }
    
    • Declarem una variable calculadora que serà inicialitzada abans de cada test.
  2. Mètode setUp amb @Before:

    @Before
    public void setUp() {
        calculadora = new Calculadora();
        System.out.println("Iniciant un nou test...");
    }
    
    • El mètode setUp s'executa abans de cada test. Aquí inicialitzem la instància de Calculadora.
  3. Mètode tearDown amb @After:

    @After
    public void tearDown() {
        calculadora = null;
        System.out.println("Test finalitzat.");
    }
    
    • El mètode tearDown s'executa després de cada test. Aquí alliberem la instància de Calculadora.
  4. Tests:

    @Test
    public void testSuma() {
        int resultat = calculadora.suma(2, 3);
        assertEquals(5, resultat);
    }
    
    @Test
    public void testResta() {
        int resultat = calculadora.resta(5, 3);
        assertEquals(2, resultat);
    }
    
    • Definim dos tests: testSuma i testResta, que comproven les operacions de suma i resta respectivament.

Exercicis Pràctics

Exercici 1

Crea una classe de test per a una classe Banco que tingui els següents mètodes: depositar i retirar. Utilitza @Before per inicialitzar una instància de Banco i @After per netejar-la.

Solució

import org.junit.Before;
import org.junit.After;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class BancoTest {

    private Banco banco;

    @Before
    public void setUp() {
        banco = new Banco();
    }

    @After
    public void tearDown() {
        banco = null;
    }

    @Test
    public void testDepositar() {
        banco.depositar(100);
        assertEquals(100, banco.getSaldo());
    }

    @Test
    public void testRetirar() {
        banco.depositar(100);
        banco.retirar(50);
        assertEquals(50, banco.getSaldo());
    }
}

Exercici 2

Modifica la classe de test anterior per afegir un mètode reset a la classe Banco que es cridi en el mètode tearDown.

Solució

import org.junit.Before;
import org.junit.After;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class BancoTest {

    private Banco banco;

    @Before
    public void setUp() {
        banco = new Banco();
    }

    @After
    public void tearDown() {
        banco.reset();
        banco = null;
    }

    @Test
    public void testDepositar() {
        banco.depositar(100);
        assertEquals(100, banco.getSaldo());
    }

    @Test
    public void testRetirar() {
        banco.depositar(100);
        banco.retirar(50);
        assertEquals(50, banco.getSaldo());
    }
}

Resum

En aquesta secció, hem après a utilitzar les anotacions @Before i @After per preparar i netejar l'entorn de test. Aquestes anotacions són essencials per assegurar que cada test s'executa en un entorn consistent i controlat. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. En el següent tema, explorarem les anotacions @BeforeClass i @AfterClass, que s'utilitzen per configurar i netejar recursos a nivell de classe.

© Copyright 2024. Tots els drets reservats