Java:
Skrive tester

Hvordan:

Java-utviklere bruker primært to rammeverk for testing: JUnit og TestNG. Her vil vi fokusere på JUnit, det mer populære valget for å skrive tester på grunn av dets enkelhet og utbredte adopsjon.

Grunnleggende om JUnit

For å bruke JUnit i ditt Maven-prosjekt, legg til følgende avhengighet i din pom.xml:

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

En grunnleggende test i JUnit ser slik ut:

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

public class CalculatorTest {
    
    @Test
    public void testAdd() {
        Calculator kalkulator = new Calculator();
        assertEquals(5, kalkulator.add(2, 3), "2 + 3 skal være lik 5");
    }
}

Å utføre denne testen vil enten passere, noe som indikerer at add-metoden fungerer som forventet, eller feile, og vise en feilmelding.

Mocking med Mockito

I virkelige scenarioer er objekter ofte avhengige av andre objekter. Mockito er et populært mocking-rammeverk som hjelper i å opprette mock-objekter for formålet med testing.

Legg til Mockito i ditt Maven-prosjekt:

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

Et enkelt brukstilfelle med 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() {
        // Opprett en mock UserRepository
        UserRepository mockRepository = mock(UserRepository.class);

        // Definer oppførsel for mock-objektet
        when(mockRepository.getUsername(1)).thenReturn("john_doe");

        UserService userService = new UserService(mockRepository);
        
        assertEquals("john_doe", userService.getUsername(1), "Bruker-ID 1 skal være john_doe");
    }
}

Denne mocken lar oss teste UserService uten å trenge et faktisk UserRepository, og fokuserer testen på logikken innenfor UserService selv.