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
Calculadora
amb els mètodessuma
,resta
,multiplicacio
idivisio
. - Escriu una classe de prova
CalculadoraTest
que 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