<div class="page">
<div class="cover text-center">
<img class="mx-auto" src=/itb/images/logo_mislata.png alt="logo">
# Anotacions JUnit
<div class="text-end fit-content ms-auto my-3 mt-auto pt-3">
<p><strong>Autor:</strong> Joan Puigcerver Ibáñez</p>
<p><strong>Correu electrònic:</strong> j.puigcerveribanez@edu.gva.es</p>
<p><strong>Curs:</strong> 2024/2025</p>
</div>
<div>
<p class="fw-bold mb-0">Llicència: BY-NC-SA</p>
<p class="d-none d-md-block">(Reconeixement - No Comercial - Compartir Igual)</p>
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ca" target="_blank">
<img class="mx-auto" src="/itb/images/license.png" alt="Licence"/>
</a>
</div><!--license-->
</div><!--cover-->
</div><!--page-->
{:toc}
## Introducció
_Junit_ proporciona una sèrie d'__anotacions__ per controlar com
s'executen els tests i per proporcionar informació adicional sobre
aquests.
## @Test
`@Test` és l'anotació principal de _Junit_, que s'utilitza per especificar
quins mètodes són métodes de testing. _Junit_ executarà automàticament tots
els mètodes anotats amb `@Test`.
## @DisplayName
L'anotació `@DisplayName` s'utilitza per especificar un nom personalitzat a
una classe o un mètode de testing. Aquest nom serà utilitzat en els resultats,
el que farà que siga més fàcil identificar el test i saber quin és el seu proposit.
Per defecte s'utilitza el nom de la classe o el mètode.
```java
@DisplayName("My custom test class name")
public class MyTestClass {
@DisplayName("My custom test name")
@Test
public void myTestMethod() {
// test code here
}
// Additional test methods
}
```
## @BeforeAll i @AfterAll
L'anotació `@BeforeAll` s'utilitza per especificar el codi que s'executarà una sola vegada
abans que els tests s'executen.
L'anotació `@AfterAll` s'utilitza per especificar el codi que s'executarà una vegada
tots els tests han acabat.
Aquests mètodes són útils per inicialitzar recursos que s'utilitzen en multiples mètodes,
com una connexió a una base de dades o l'accés a un fitxer compartit.
```java
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
public class MyTestClass {
@BeforeAll
public static void setUp() {
// code that should be run once before all the test methods
// this method should be static
}
@AfterAll
public static void tearDown() {
// code that should be run once after all the test methods
// this method should be static
}
@Test
public void test1() {
// test code here
}
@Test
public void test2() {
// test code here
}
}
```
En aquest exemple, s'executaran els mètodes en l'ordre:
- `setUp()`
- `test1()`
- `test2()`
- `tearDown()`
## @BeforeEach i @AfterEach
L'anotació `@BeforeEach` s'utilitza per especificar el codi que s'executarà
abans que cada test s'execute.
L'anotació `@AfterEach` s'utilitza per especificar el codi que s'executarà
després que cada test s'execute.
Aquests mètodes són útils per inicialitzar recursos que en un sol test,
com __objectes simulats (mock objects)__ o un fitxer temporal.
```java
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
public class MyTestClass {
@BeforeEach
public void setUp() {
// code that should be run before each test method
}
@AfterEach
public void tearDown() {
// code that should be run after each test method
}
@Test
public void test1() {
// test code here
}
@Test
public void test2() {
// test code here
}
}
```
En aquest exemple, s'executaran els mètodes en l'ordre:
- `setUp()`
- `test1()`
- `tearDown()`
- `setUp()`
- `test2()`
- `tearDown()`
## @Disabled
L'anotació `@Disabled` s'utilitza per deshabilitar un test temporalment.
_JUnit_ ometrà aquest test mentres estiga deshabilitat.
Aquesta anotació pot ser útil, per exemple, quan el test falla i esteu treballant per arreglar-lo
o quan la funcionalitat que s'està provant encara no està implementada.
D'aquesta manera podeu mantindre el test en el codi font sense la necessitat de comanetar-lo
i també es pot veure el motiu pel qual està desactivat.
```java
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
public class MyTestClass {
@Test
public void test1() {
// test code here
}
@Disabled("This test is currently not working, we are working on it")
@Test
public void test2() {
// test code here
}
}
```
## @Nested
L'anotació `@Nested` s'utilitza per definir una classe anidada
dins d'una altra classe de tests. D'aquesta manera es poden
agrupar tests que tinguen relació entre ells.
La classe `@Nested` pot utilitzar les anotacions `@BeforeEach`, `@AfterEach`, `@BeforeAll` i `@AfterAll`,
igual que qualsevol altra classe i sols s'aplicaran als mètodes continguts en aquesta classe.
```java
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
public class MyTestClass {
@Test
public void test1() {
// test code here
}
@Nested
public class NestedTestClass {
@Test
public void test2() {
// test code here
}
@Test
public void test3() {
// test code here
}
}
}
```
Aquest lloc web utilitza galetes per millorar l'experiència de l'usuari