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
calculadoraque serà inicialitzada abans de cada test.
- Declarem una variable
-
Mètode
setUpamb @Before:@Before public void setUp() { calculadora = new Calculadora(); System.out.println("Iniciant un nou test..."); }- El mètode
setUps'executa abans de cada test. Aquí inicialitzem la instància deCalculadora.
- El mètode
-
Mètode
tearDownamb @After:@After public void tearDown() { calculadora = null; System.out.println("Test finalitzat."); }- El mètode
tearDowns'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:
testSumaitestResta, 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
