Java:
Pisanie testów
Jak to robić:
Programiści Java głównie używają dwóch frameworków testowych: JUnit i TestNG. Tutaj skupimy się na JUnit, który jest popularniejszym wyborem do pisania testów ze względu na swoją prostotę i szerokie przyjęcie.
Podstawy JUnit
Aby użyć JUnit w projekcie Maven, dodaj następującą zależność do pliku pom.xml
:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.0</version>
<scope>test</scope>
</dependency>
Podstawowy test w JUnit wygląda tak:
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 powinno równać się 5");
}
}
Wykonanie tego testu zakończy się sukcesem, co oznacza, że metoda add
działa zgodnie z oczekiwaniami, lub porażką, wyświetlając komunikat o błędzie.
Mokowanie z użyciem Mockito
W rzeczywistych scenariuszach, obiekty często zależą od innych obiektów. Mockito to popularny framework do mokowania, który pomaga w tworzeniu mokowanych obiektów do celów testowych.
Dodaj Mockito do swojego projektu Maven:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>4.5.1</version>
<scope>test</scope>
</dependency>
Prosty przypadek użycia z 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() {
// Utworzenie mokowanego UserRepository
UserRepository mockRepository = mock(UserRepository.class);
// Zdefiniowanie zachowania dla mokowanego obiektu
when(mockRepository.getUsername(1)).thenReturn("john_doe");
UserService userService = new UserService(mockRepository);
assertEquals("john_doe", userService.getUsername(1), "User ID 1 powinien być john_doe");
}
}
Ten mok pozwala nam testować UserService
bez potrzeby posiadania rzeczywistego UserRepository
, skupiając test na logice znajdującej się w samym UserService
.