<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 } } } ```