Java:
Tests Schreiben
Wie:
Java-Entwickler verwenden hauptsächlich zwei Test-Frameworks: JUnit und TestNG. Hier konzentrieren wir uns auf JUnit, die beliebtere Wahl für das Schreiben von Tests aufgrund seiner Einfachheit und weit verbreiteten Akzeptanz.
JUnit-Grundlagen
Um JUnit in Ihrem Maven-Projekt zu verwenden, fügen Sie die folgende Abhängigkeit zu Ihrer pom.xml
hinzu:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.0</version>
<scope>test</scope>
</dependency>
Ein grundlegender Test in JUnit sieht so aus:
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 sollte 5 ergeben");
}
}
Die Ausführung dieses Tests wird entweder bestehen, was darauf hinweist, dass die add
Methode wie erwartet funktioniert, oder fehlschlagen, was eine Fehlermeldung anzeigt.
Mocking mit Mockito
In realen Szenarien hängen Objekte oft von anderen Objekten ab. Mockito ist ein beliebtes Mocking-Framework, das beim Erstellen von Mock-Objekten zum Zweck des Testens hilft.
Fügen Sie Mockito Ihrem Maven-Projekt hinzu:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>4.5.1</version>
<scope>test</scope>
</dependency>
Ein einfacher Anwendungsfall mit 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() {
// Erstellen eines Mock UserRepository
UserRepository mockRepository = mock(UserRepository.class);
// Verhalten für Mock-Objekt definieren
when(mockRepository.getUsername(1)).thenReturn("john_doe");
UserService userService = new UserService(mockRepository);
assertEquals("john_doe", userService.getUsername(1), "User-ID 1 sollte john_doe sein");
}
}
Dieser Mock ermöglicht es uns, UserService
zu testen, ohne ein tatsächliches UserRepository
zu benötigen, wobei der Test sich auf die Logik innerhalb von UserService
selbst konzentriert.