# Nachdenkzettel: JUnit-Tests

Bearbeiten Sie die Aufgaben kurz und präzise. Ziel ist nicht, möglichst viele Tests zu schreiben, sondern sinnvolle Testfälle zu erkennen und verständlich zu begründen.

## 1. Was sollte getestet werden?

Betrachten Sie die Klasse `GradeCalculator`:

```java
public class GradeCalculator {
    public boolean hasPassed(int points, int maxPoints) {
        double percentage = (double) points / maxPoints;
        return percentage >= 0.5;
    }
}
```

**Aufgaben:**

1. Nennen Sie drei sinnvolle Testfälle für `hasPassed`.
2. Welche Grenzfälle sollten getestet werden bzw. welche ungültigen Eingaben sind möglich?
3. Formulieren Sie einen kurzen Verbesserungsvorschlag für die Methode.

## 2. Einen ersten JUnit-Test schreiben

Schreiben Sie mindestens zwei JUnit-Tests für die Methode `hasPassed`.

Beispielstruktur:

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

class GradeCalculatorTest {
    @Test
    void returnsTrueWhenEnoughPointsAreReached() {
        GradeCalculator calculator = new GradeCalculator();
        boolean result = calculator.hasPassed(50, 100);
        assertTrue(result);
    }
}
```

**Aufgaben:**

1. Ergänzen Sie einen Testfall, bei dem `true` erwartet wird.
2. Ergänzen Sie einen Testfall, bei dem `false` erwartet wird.
3. Achten Sie auf sprechende Testnamen.
4. Trennen Sie im Test sichtbar Vorbereitung, Ausführung und Prüfung.

## 3. Testen von Fehlerfällen

Die Methode soll keine ungültigen Werte akzeptieren. Beispiele für ungültige Werte sind negative Punkte oder `maxPoints == 0`.

Eine mögliche Erwartung wäre:

```java
assertThrows(IllegalArgumentException.class, () -> {
    calculator.hasPassed(-1, 100);
});
```

**Aufgaben:**

1. Schreiben Sie einen Test für negative Punkte.
2. Schreiben Sie einen Test für `maxPoints == 0`.
3. Passen Sie die Methode `hasPassed` so an, dass diese Tests bestanden werden.
4. Warum ist es sinnvoll, Fehlerfälle explizit zu testen?

## 4. Gute Tests mithilfe von KI (Optional)

Nutzen Sie ein KI-Werkzeug Ihrer Wahl, um zusätzliche JUnit-Tests für `GradeCalculator` vorzuschlagen. Übernehmen Sie die Vorschläge nicht ungeprüft.

**Aufgaben:**

1. Geben Sie den Prompt an, den Sie verwendet haben.
2. Notieren Sie zwei Testfälle, die Sie sinnvoll finden.
3. Notieren Sie einen Testfall, der doppelt, unnötig oder schlecht begründet ist.
4. Verbessern Sie einen KI-Test so, dass der Testname und die Assertions klarer werden.

## Abgabe

Geben Sie in ihrem PDF ab:

1. Ihre kurzen Antworten zu den Aufgaben.
2. Ihre JUnit-Testklasse `GradeCalculatorTest`.
3. Ihre verbesserte Version von `GradeCalculator`.
