Testen in Java: Frameworks und Tools (JUnit, TestNG, Mockito)

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Testen in Java: Überblick über Frameworks und Tools



Qualitätssicherung ist ein wesentlicher Bestandteil der Java-Entwicklung. Moderne Frameworks ermöglichen die Automatisierung von Code-Überprüfungen, das frühzeitige Erkennen von Fehlern und die Sicherstellung der Anwendungsstabilität. In diesem Artikel betrachten wir die wichtigsten Werkzeuge für Unit-Tests, Mocking und Integrationstests in Java und geben praktische Beispiele für deren Verwendung.



1. JUnit 5 — Standard für Unit-Tests



JUnit 5 (Jupiter) ist das beliebteste Framework für modulare Tests in Java. Es bietet Annotationen zur Definition von Testmethoden, zur Verwaltung des Lebenszyklus und zur Parametrisierung.



Wichtige JUnit 5-Annotationen:

  • @Test — kennzeichnet eine Testmethode
  • @BeforeEach / @AfterEach — werden vor/nach jedem Test ausgeführt
  • @BeforeAll / @AfterAll — werden einmal für die gesamte Klasse ausgeführt
  • @ParameterizedTest — für Tests mit verschiedenen Eingabedaten


Beispiel eines einfachen Tests:

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

public class CalculatorTest {

@Test void testAddition() { Calculator calc = new Calculator(); assertEquals(5, calc.add(2, 3)); }

@Test void testDivisionByZero() { Calculator calc = new Calculator(); assertThrows(ArithmeticException.class, () -> calc.divide(10, 0)); }}


2. TestNG — Alternative mit erweiterten Funktionen



TestNG (Test Next Generation) ist ein weiteres leistungsstarkes Framework, das von JUnit inspiriert wurde, aber zusätzliche Funktionen bietet: Testgruppierung, abhängige Tests, parallele Ausführung und flexible Konfigurationen über XML.



Besondere Merkmale von TestNG:

  • @Test(groups = {"smoke"}) — Gruppierung von Tests
  • @DataProvider — Übergabe von Daten an Tests
  • @Test(dependsOnMethods = {"methodA"}) — Abhängigkeiten zwischen Tests


Beispiel mit DataProvider:

import org.testng.annotations.DataProvider;import org.testng.annotations.Test;import static org.testng.Assert.assertEquals;

public class DataDrivenTest {

@DataProvider(name = "testData") public Object[][] createData() { return new Object[][] { { 1, 2, 3 }, { 5, -3, 2 }, { 0, 0, 0 } }; }

@Test(dataProvider = "testData") public void testAdd(int a, int b, int expected) { Calculator calc = new Calculator(); assertEquals(calc.add(a, b), expected); }}


3. Mockito — Erstellung von Stubs (Mocks)



Mockito ist eine Bibliothek zur Erstellung von Mock-Objekten in Java. Sie ermöglicht es, die zu testende Komponente von ihren Abhängigkeiten (Datenbanken, externe Dienste) zu isolieren und die Interaktion zwischen Objekten zu überprüfen.



Wichtige Funktionen von Mockito:

  • mock() — Erstellung eines Mock-Objekts
  • when().thenReturn() — Festlegen des Verhaltens
  • verify() — Überprüfung von Methodenaufrufen
  • @Mock und @InjectMocks — automatische Einbindung von Mocks


Beispiel zur Verwendung von Mockito:

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

public class UserServiceTest {

@Test void testGetUser() { // Erstellen eines Mocks für das Repository UserRepository mockRepo = mock(UserRepository.class); when(mockRepo.findById(1L)).thenReturn(new User("Alice"));

UserService service = new UserService(mockRepo); User user = service.getUser(1L);

assertEquals("Alice", user.getName()); verify(mock

Empfehlungen