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
-
Declaració de la Classe i Variables:
public class CalculadoraTest { private Calculadora calculadora; }
- Declarem una variable
calculadora
que serà inicialitzada abans de cada test.
- Declarem una variable
-
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 deCalculadora
.
- El mètode
-
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 deCalculadora
.
- El mètode
-
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
itestResta
, que comproven les operacions de suma i resta respectivament.
- Definim dos tests:
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.
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