Les assertions personalitzades són una eina poderosa que permet als desenvolupadors crear les seves pròpies verificacions específiques per a les necessitats del seu projecte. Aquestes assertions poden simplificar el codi de test i fer-lo més llegible i mantenible.

Per què utilitzar assertions personalitzades?

  • Reutilització de codi: Les assertions personalitzades permeten encapsular la lògica de verificació complexa en una sola funció, que es pot reutilitzar en múltiples tests.
  • Millora de la llegibilitat: Les assertions personalitzades poden fer que els tests siguin més fàcils de llegir i entendre, ja que encapsulen la lògica de verificació en noms de mètodes significatius.
  • Mantenibilitat: Si la lògica de verificació canvia, només cal actualitzar l'assertion personalitzada en un sol lloc.

Creació d'Assertions Personalitzades

Pas 1: Crear una Classe d'Assertions

Primer, crearem una classe d'assertions personalitzades. Aquesta classe contindrà els mètodes d'assertion que encapsulen la lògica de verificació específica.

public class CustomAssertions {

    public static void assertIsPositive(int number) {
        if (number <= 0) {
            throw new AssertionError("Expected a positive number, but got: " + number);
        }
    }

    public static void assertIsEven(int number) {
        if (number % 2 != 0) {
            throw new AssertionError("Expected an even number, but got: " + number);
        }
    }
}

Pas 2: Utilitzar les Assertions Personalitzades en els Tests

Ara que tenim la nostra classe d'assertions personalitzades, podem utilitzar aquests mètodes en els nostres tests.

import org.junit.jupiter.api.Test;

public class CustomAssertionsTest {

    @Test
    public void testPositiveNumber() {
        int number = 5;
        CustomAssertions.assertIsPositive(number);
    }

    @Test
    public void testEvenNumber() {
        int number = 4;
        CustomAssertions.assertIsEven(number);
    }

    @Test
    public void testNegativeNumber() {
        int number = -3;
        CustomAssertions.assertIsPositive(number); // Aquest test fallarà
    }

    @Test
    public void testOddNumber() {
        int number = 3;
        CustomAssertions.assertIsEven(number); // Aquest test fallarà
    }
}

Pas 3: Afegir Missatges d'Error Descriptius

És important proporcionar missatges d'error descriptius per facilitar la depuració quan un test falla. Ja hem afegit missatges d'error en els nostres mètodes d'assertion personalitzats.

Pas 4: Assertions Personalitzades amb Objectes Complexos

Les assertions personalitzades també poden ser útils per verificar objectes complexos. Per exemple, si tenim una classe Person i volem verificar que dues instàncies de Person són iguals basant-nos en certs atributs, podem crear una assertion personalitzada per a això.

public class Person {
    private String name;
    private int age;

    // Constructor, getters, and setters
}

public class CustomAssertions {

    public static void assertPersonEquals(Person expected, Person actual) {
        if (!expected.getName().equals(actual.getName())) {
            throw new AssertionError("Expected name: " + expected.getName() + ", but got: " + actual.getName());
        }
        if (expected.getAge() != actual.getAge()) {
            throw new AssertionError("Expected age: " + expected.getAge() + ", but got: " + actual.getAge());
        }
    }
}

Exemple d'ús amb Objectes Complexos

import org.junit.jupiter.api.Test;

public class CustomAssertionsTest {

    @Test
    public void testPersonEquality() {
        Person expected = new Person("John", 30);
        Person actual = new Person("John", 30);
        CustomAssertions.assertPersonEquals(expected, actual);
    }

    @Test
    public void testPersonInequality() {
        Person expected = new Person("John", 30);
        Person actual = new Person("Jane", 25);
        CustomAssertions.assertPersonEquals(expected, actual); // Aquest test fallarà
    }
}

Exercicis Pràctics

Exercici 1: Crear una Assertion Personalitzada per Verificar Strings

Crea una assertion personalitzada que verifiqui si una cadena de text conté una subcadena específica.

public class CustomAssertions {

    public static void assertStringContains(String str, String substring) {
        if (!str.contains(substring)) {
            throw new AssertionError("Expected string to contain: " + substring + ", but got: " + str);
        }
    }
}

Exercici 2: Utilitzar la Nova Assertion en un Test

import org.junit.jupiter.api.Test;

public class CustomAssertionsTest {

    @Test
    public void testStringContains() {
        String str = "Hello, world!";
        CustomAssertions.assertStringContains(str, "world");
    }

    @Test
    public void testStringDoesNotContain() {
        String str = "Hello, world!";
        CustomAssertions.assertStringContains(str, "JUnit"); // Aquest test fallarà
    }
}

Conclusió

Les assertions personalitzades són una eina valuosa per millorar la llegibilitat, la reutilització i la mantenibilitat dels tests. En encapsular la lògica de verificació en mètodes significatius, podem fer que els nostres tests siguin més clars i fàcils de mantenir. Practica creant les teves pròpies assertions personalitzades per adaptar-les a les necessitats específiques del teu projecte.

© Copyright 2024. Tots els drets reservats