Skip to content

Unit Testing ​

🟒 EinfachBearbeitet β˜‘οΈ19.03.2026

Zusammenfassung ​

Unit Testing ist das automatisierte Testen von einzelnen, isolierten Code-Einheiten (meist Methoden/Klassen). Es ist die Grundlage fΓΌr zuverlΓ€ssige Software und ermΓΆglicht schnelle Refactorings ohne Angst vor Regressions.

Kernkonzept ​

Unit Tests prΓΌfen das Verhalten einer einzelnen Methode oder Klasse unabhΓ€ngig von anderen Komponenten.

Sie basieren auf dem AAA-Pattern:

  • Arrange: Testdaten und Zustand vorbereiten
  • Act: Die zu testende Methode aufrufen
  • Assert: Ergebnis ΓΌberprΓΌfen

Isolation ist zentral: Tests sollten voneinander unabhΓ€ngig sein und keine externen AbhΓ€ngigkeiten (DB, APIs, File-System) haben. DafΓΌr nutzt man Mocks und Stubs.

Code-Beispiel ​

java
// Klasse unter Test
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

// Unit Test mit JUnit 5
@Test
void testAddPositiveNumbers() {
    // Arrange
    Calculator calc = new Calculator();
    
    // Act
    int result = calc.add(5, 3);
    
    // Assert
    assertEquals(8, result, "5 + 3 sollte 8 ergeben");
}

@Test
void testAddNegativeNumbers() {
    Calculator calc = new Calculator();
    int result = calc.add(-5, -3);
    assertEquals(-8, result);
}

Wichtige Punkte ​

  • Schnell: Unit Tests dauern Millisekunden, nicht Sekunden
  • Wiederholbar: Jeder Test liefert immer das gleiche Ergebnis
  • UnabhΓ€ngig: Tests beeinflussen sich gegenseitig nicht
  • AussagekrΓ€ftig: Der Test-Name beschreibt klar, was geprΓΌft wird
  • Wartbar: Ein Test = eine Verantwortung; komplexe Tests sind ein Code-Smell

Klassische Fragen ​

Wann schreibe ich Unit Tests? ​

Vor oder nach dem Code? Idealerweise vorher (TDD), praktisch meist parallel oder direkt danach. Die wichtigsten Faustregel: Je kritischer der Code, desto wichtiger der Test.


Muss ich jede Methode testen? ​

Nein. Triviale Getter/Setter brauchst du nicht zu testen. Fokussiere auf Business-Logik, Fehlerbehandlung und Edge Cases. Eine Code-Coverage von 70-80% ist realistisch und sinnvoll.


Unit Test vs. Integrations Test? ​

Unit Tests isolieren eine Einheit (Mock-AbhΓ€ngigkeiten). Integrations Tests prΓΌfen mehrere Komponenten zusammen (echte DB, APIs). Unit Tests sind schneller, Integrations Tests liefern hΓΆhere Gewissheit.


Wie mock ich AbhΓ€ngigkeiten richtig? ​

Nutze Mockito (when().thenReturn()), Spy fΓΌr Partial-Mocks oder Test-Doubles. Mocks simulieren echte Objekte, aber zu viele Mocks = zu viel Isolation = unrealistische Tests.


Was ist ein guter Test-Name? ​

Pattern: testMethodeName_WhenCondition_ThenExpectation Beispiel: testCalculatePrice_WhenDiscountApplied_ThenReturnReducedPrice


Wusstest du schon? ​

🎯 TDD-Paradoxon: Entwickler, die zuerst Tests schreiben (TDD), benâtigen am Ende 20-40% weniger Debug-Zeit, schreiben aber 10-15% mehr Code. Das zahlt sich langfristig massiv aus!