Java:
Testien kirjoittaminen

Kuinka:

Java-kehittäjät käyttävät pääasiassa kahta testauskehystä: JUnitia ja TestNG:tä. Tässä keskitymme JUnitiin, joka on suositumpi valinta testien kirjoittamiseen sen yksinkertaisuuden ja laajan käyttöönoton vuoksi.

JUnit Perusteet

JUnitin käyttöönotto Maven-projektissasi vaatii seuraavan riippuvuuden lisäämistä pom.xml-tiedostoosi:

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

Perustestaus JUnitissa näyttää tältä:

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 pitäisi olla 5");
    }
}

Tämän testin suorittaminen joko läpäisee, mikä osoittaa, että add-metodi toimii odotetusti, tai epäonnistuu, näyttäen virheviestin.

Mockaus Mockitoa käyttäen

Todellisissa tilanteissa, oliot usein riippuvat muista olioista. Mockito on suosittu mockauskehys, joka auttaa luomaan mock-olioita testaustarkoituksessa.

Lisää Mockito Maven-projektiisi:

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

Yksinkertainen käyttötapaus Mockitoa käyttäen:

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() {
        // Luo mock UserRepository
        UserRepository mockRepository = mock(UserRepository.class);

        // Määrittele käyttäytymistä mock-oliolle
        when(mockRepository.getUsername(1)).thenReturn("john_doe");

        UserService userService = new UserService(mockRepository);
        
        assertEquals("john_doe", userService.getUsername(1), "Käyttäjä-ID 1 pitäisi olla john_doe");
    }
}

Tämä mock mahdollistaa UserService-testaamisen ilman oikeaa UserRepository-instanssia, keskittyen testissä UserService-logiikan testaamiseen.