Java:
Scrivere test

Come fare:

Gli sviluppatori Java utilizzano principalmente due framework di test: JUnit e TestNG. Qui, ci concentreremo su JUnit, la scelta più popolare per scrivere test grazie alla sua semplicità e alla diffusa adozione.

Fondamenti di JUnit

Per utilizzare JUnit nel tuo progetto Maven, aggiungi la seguente dipendenza al tuo pom.xml:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.9.0</version>
    <scope>test</scope>
</dependency>

Un test di base in JUnit si presenta così:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class CalculatorTest {
    
    @Test
    public void testAdd() {
        Calculator calculator = new Calculator();
        assertEquals(5, calculator.add(2, 3), "2 + 3 dovrebbe fare 5");
    }
}

Eseguendo questo test, il risultato sarà o il superamento, indicando che il metodo add funziona come previsto, o il fallimento, mostrando un messaggio di errore.

Simulazione con Mockito

In scenari reali, gli oggetti spesso dipendono da altri oggetti. Mockito è un framework di simulazione popolare che aiuta nella creazione di oggetti fittizi ai fini del test.

Aggiungi Mockito al tuo progetto Maven:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>4.5.1</version>
    <scope>test</scope>
</dependency>

Un semplice caso d’uso con Mockito:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.*;

public class UserServiceTest {

    @Test
    public void testGetUsername() {
        // Crea un UserRepository fittizio
        UserRepository mockRepository = mock(UserRepository.class);

        // Definisci il comportamento per l'oggetto fittizio
        when(mockRepository.getUsername(1)).thenReturn("john_doe");

        UserService userService = new UserService(mockRepository);
        
        assertEquals("john_doe", userService.getUsername(1), "L'ID utente 1 dovrebbe essere john_doe");
    }
}

Questo mock ci permette di testare UserService senza la necessità di un vero UserRepository, concentrando il test sulla logica all’interno di UserService stesso.