JUnit és un dels frameworks de proves més populars per a Java. Permet als desenvolupadors escriure i executar proves unitàries de manera senzilla i eficient. Les proves unitàries són essencials per assegurar que el codi funcioni correctament i per detectar errors de manera primerenca en el cicle de desenvolupament.
Continguts
Introducció a JUnit
JUnit és un framework de proves unitàries per a Java que permet als desenvolupadors escriure i executar proves de manera senzilla. Les proves unitàries són petites proves que verifiquen el comportament d'una unitat de codi, com ara un mètode o una classe.
Beneficis de JUnit
- Detecció Primerenca d'Errors: Permet detectar errors en el codi de manera primerenca.
- Refactorització Segura: Facilita la refactorització del codi amb confiança.
- Documentació del Codi: Les proves poden servir com a documentació del comportament esperat del codi.
- Automatització de Proves: Permet l'automatització de proves, millorant l'eficiència del desenvolupament.
Configuració de JUnit
Afegir JUnit al Projecte
Per utilitzar JUnit, primer cal afegir la dependència de JUnit al projecte. Si utilitzes Maven, pots afegir la següent dependència al teu pom.xml:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>Si utilitzes Gradle, afegeix la següent línia al teu build.gradle:
Estructura d'una Prova JUnit
Una prova JUnit típica consta de les següents parts:
- Classe de Prova: Una classe que conté els mètodes de prova.
- Mètodes de Prova: Mètodes que contenen el codi de prova.
- Anotacions: Anotacions que indiquen a JUnit com executar els mètodes de prova.
Exemple Bàsic
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CalculadoraTest {
@Test
public void testSuma() {
Calculadora calc = new Calculadora();
int resultat = calc.suma(2, 3);
assertEquals(5, resultat);
}
}En aquest exemple, CalculadoraTest és la classe de prova, testSuma és el mètode de prova, i @Test és l'anotació que indica a JUnit que aquest mètode és una prova.
Anotacions de JUnit
JUnit proporciona diverses anotacions per configurar i executar proves:
@Test: Indica que un mètode és una prova.@Before: S'executa abans de cada mètode de prova.@After: S'executa després de cada mètode de prova.@BeforeClass: S'executa una vegada abans de tots els mètodes de prova en la classe.@AfterClass: S'executa una vegada després de tots els mètodes de prova en la classe.@Ignore: Indica que un mètode de prova ha de ser ignorat.
Exemple d'Ús d'Anotacions
import org.junit.Before;
import org.junit.After;
import org.junit.BeforeClass;
import org.junit.AfterClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CalculadoraTest {
private Calculadora calc;
@BeforeClass
public static void setupClass() {
System.out.println("Abans de totes les proves");
}
@AfterClass
public static void teardownClass() {
System.out.println("Després de totes les proves");
}
@Before
public void setup() {
calc = new Calculadora();
}
@After
public void teardown() {
calc = null;
}
@Test
public void testSuma() {
int resultat = calc.suma(2, 3);
assertEquals(5, resultat);
}
}Assert Statements
Les assert statements s'utilitzen per verificar que els resultats de les proves són els esperats. JUnit proporciona diverses assert statements, com ara:
assertEquals(expected, actual): Verifica que dos valors són iguals.assertTrue(condition): Verifica que una condició és certa.assertFalse(condition): Verifica que una condició és falsa.assertNull(object): Verifica que un objecte és null.assertNotNull(object): Verifica que un objecte no és null.
Exemple d'Ús d'Assert Statements
import org.junit.Test;
import static org.junit.Assert.*;
public class CalculadoraTest {
@Test
public void testResta() {
Calculadora calc = new Calculadora();
int resultat = calc.resta(5, 3);
assertEquals(2, resultat);
}
@Test
public void testMultiplicacio() {
Calculadora calc = new Calculadora();
int resultat = calc.multiplicacio(2, 3);
assertTrue(resultat == 6);
}
}Proves Parametritzades
JUnit permet escriure proves parametritzades, que són proves que s'executen diverses vegades amb diferents conjunts de dades.
Exemple de Prova Parametritzada
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class)
public class CalculadoraParamTest {
private int input1;
private int input2;
private int expected;
public CalculadoraParamTest(int input1, int input2, int expected) {
this.input1 = input1;
this.input2 = input2;
this.expected = expected;
}
@Parameterized.Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{ 1, 1, 2 },
{ 2, 3, 5 },
{ 3, 3, 6 }
});
}
@Test
public void testSuma() {
Calculadora calc = new Calculadora();
assertEquals(expected, calc.suma(input1, input2));
}
}Exercicis Pràctics
Exercici 1: Escriure Proves per a una Classe Calculadora
- Crea una classe
Calculadoraamb els mètodessuma,resta,multiplicacioidivisio. - Escriu una classe de prova
CalculadoraTestque contingui proves per a cadascun dels mètodes de la classeCalculadora.
Solució
public class Calculadora {
public int suma(int a, int b) {
return a + b;
}
public int resta(int a, int b) {
return a - b;
}
public int multiplicacio(int a, int b) {
return a * b;
}
public int divisio(int a, int b) {
if (b == 0) {
throw new IllegalArgumentException("El divisor no pot ser zero");
}
return a / b;
}
}import org.junit.Test;
import static org.junit.Assert.*;
public class CalculadoraTest {
@Test
public void testSuma() {
Calculadora calc = new Calculadora();
assertEquals(5, calc.suma(2, 3));
}
@Test
public void testResta() {
Calculadora calc = new Calculadora();
assertEquals(2, calc.resta(5, 3));
}
@Test
public void testMultiplicacio() {
Calculadora calc = new Calculadora();
assertEquals(6, calc.multiplicacio(2, 3));
}
@Test(expected = IllegalArgumentException.class)
public void testDivisioPerZero() {
Calculadora calc = new Calculadora();
calc.divisio(5, 0);
}
@Test
public void testDivisio() {
Calculadora calc = new Calculadora();
assertEquals(2, calc.divisio(6, 3));
}
}Conclusió
JUnit és una eina poderosa per a la realització de proves unitàries en Java. Permet als desenvolupadors escriure proves de manera senzilla i eficient, millorant la qualitat del codi i facilitant la detecció primerenca d'errors. En aquest tema, hem après a configurar JUnit, escriure proves bàsiques, utilitzar anotacions i assert statements, i crear proves parametritzades. Amb aquestes habilitats, estaràs preparat per assegurar la qualitat del teu codi Java mitjançant proves unitàries.
Curs de Programació en Java
Mòdul 1: Introducció a Java
- Introducció a Java
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Operadors
Mòdul 2: Flux de Control
Mòdul 3: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Mètodes
- Constructors
- Herència
- Polimorfisme
- Encapsulació
- Abstracció
Mòdul 4: Programació Orientada a Objectes Avançada
Mòdul 5: Estructures de Dades i Col·leccions
Mòdul 6: Gestió d'Excepcions
Mòdul 7: Entrada/Sortida de Fitxers
- Lectura de Fitxers
- Escriptura de Fitxers
- Fluxos de Fitxers
- BufferedReader i BufferedWriter
- Serialització
Mòdul 8: Multithreading i Concurrència
- Introducció al Multithreading
- Creació de Fils
- Cicle de Vida dels Fils
- Sincronització
- Utilitats de Concurrència
Mòdul 9: Xarxes
- Introducció a les Xarxes
- Sockets
- ServerSocket
- DatagramSocket i DatagramPacket
- URL i HttpURLConnection
