En aquest tema, aprendrem sobre les anotacions @BeforeClass i @AfterClass a JUnit. Aquestes anotacions són útils per configurar i netejar recursos que són compartits per tots els tests d'una classe de test. A diferència de @Before i @After, que s'executen abans i després de cada test, @BeforeClass i @AfterClass s'executen una sola vegada abans i després de tots els tests de la classe, respectivament.
Conceptes Clau
- @BeforeClass: S'utilitza per executar codi abans de qualsevol test en la classe de test. Ideal per inicialitzar recursos compartits.
- @AfterClass: S'utilitza per executar codi després de tots els tests en la classe de test. Ideal per alliberar recursos compartits.
Exemple Pràctic
A continuació, veurem un exemple pràctic per entendre millor com utilitzar aquestes anotacions.
Exemple de Codi
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CalculadoraTest {
private static Calculadora calculadora;
@BeforeClass
public static void inicialitzar() {
// Aquest mètode s'executa una sola vegada abans de tots els tests
calculadora = new Calculadora();
System.out.println("Inicialitzant recursos compartits...");
}
@AfterClass
public static void netejar() {
// Aquest mètode s'executa una sola vegada després de tots els tests
calculadora = null;
System.out.println("Alliberant recursos compartits...");
}
@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
-
Inicialització amb @BeforeClass:
- El mètode
inicialitzar()està anotat amb@BeforeClass, el que significa que s'executarà una sola vegada abans de qualsevol test en la classeCalculadoraTest. - En aquest mètode, inicialitzem una instància de
Calculadoraque serà compartida per tots els tests.
- El mètode
-
Neteja amb @AfterClass:
- El mètode
netejar()està anotat amb@AfterClass, el que significa que s'executarà una sola vegada després de tots els tests en la classeCalculadoraTest. - En aquest mètode, alliberem la instància de
Calculadoraestablint-la anull.
- El mètode
-
Tests Individuals:
- Els mètodes
testSuma()itestResta()són tests individuals que utilitzen la instància compartida deCalculadoraper realitzar operacions i verificar els resultats amb assertions.
- Els mètodes
Exercici Pràctic
Exercici
Crea una classe de test per a una classe BaseDeDades que necessiti una connexió a la base de dades abans de qualsevol test i que tanqui la connexió després de tots els tests.
- Defineix una classe
BaseDeDadesTest. - Utilitza
@BeforeClassper establir una connexió a la base de dades. - Utilitza
@AfterClassper tancar la connexió a la base de dades. - Escriu almenys dos tests que utilitzin la connexió a la base de dades.
Solució
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
public class BaseDeDadesTest {
private static BaseDeDades baseDeDades;
@BeforeClass
public static void establirConnexio() {
// Aquest mètode s'executa una sola vegada abans de tots els tests
baseDeDades = new BaseDeDades();
baseDeDades.connectar();
System.out.println("Connexió a la base de dades establerta...");
}
@AfterClass
public static void tancarConnexio() {
// Aquest mètode s'executa una sola vegada després de tots els tests
baseDeDades.desconnectar();
baseDeDades = null;
System.out.println("Connexió a la base de dades tancada...");
}
@Test
public void testConnexioNoNull() {
assertNotNull(baseDeDades.getConnexio());
}
@Test
public void testConsulta() {
boolean resultat = baseDeDades.executarConsulta("SELECT * FROM usuaris");
assertTrue(resultat);
}
}Explicació de la Solució
-
Inicialització amb @BeforeClass:
- El mètode
establirConnexio()s'executa abans de qualsevol test per establir una connexió a la base de dades.
- El mètode
-
Neteja amb @AfterClass:
- El mètode
tancarConnexio()s'executa després de tots els tests per tancar la connexió a la base de dades.
- El mètode
-
Tests Individuals:
testConnexioNoNull()verifica que la connexió a la base de dades no siguinull.testConsulta()verifica que una consulta SQL s'executi correctament.
Resum
En aquesta secció, hem après com utilitzar les anotacions @BeforeClass i @AfterClass per inicialitzar i netejar recursos compartits abans i després de tots els tests d'una classe. Aquestes anotacions són especialment útils per gestionar recursos costosos com connexions a bases de dades, fitxers, o altres serveis externs.
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
