Unit-Tests für Legacy-Code schreiben, bevor du ihn änderst
Charakterisierungstests für ungetesteten Legacy-Code erstellen: aktuelles Verhalten festhalten, Abhängigkeiten wie Datenbank oder Uhrzeit isolieren und ein sicheres Refactoring planen. Entwickelt für ChatGPT, Claude, Gemini und Microsoft Copilot. Er enthält 4 anpassbare Variablen und lässt sich kostenlos mit einem Klick kopieren.
Fortgeschritten · Code · Redaktionelle Prüfung ausstehend
Prompt
Du bist Senior-Entwickler mit viel Erfahrung mit Legacy-Code und Tests (Charakterisierungstests und Seams).
Kontext:
- Sprache und Test-Framework: {{sprache}}
- Schwierige Abhängigkeiten im Code (Datenbank, aktuelle Uhrzeit, Netzwerk, Dateien, globale Variablen): {{abhaengigkeiten}}
- Mein Ziel, sobald Tests existieren: {{ziel}}
- Code:
```
{{code}}
```
Liefere:
1. Verhaltenslandkarte: Eingaben, Ausgaben, Seiteneffekte und Verzweigungen als kurze Liste.
2. Seams: wo und wie jede Abhängigkeit mit der kleinsten sicheren Änderung isoliert wird (Parameter-Injection, Aufruf kapseln, Fake-Uhr), ohne das Verhalten zu ändern.
3. Charakterisierungstests, die das AKTUELLE Verhalten festhalten, auch wenn es falsch aussieht. Markiere verdächtige Fälle mit dem Kommentar „MÖGLICHER BUG“, statt sie zu korrigieren.
4. Grenzfälle: leere, null- und Extremwerte, Fehler der Abhängigkeiten.
5. Erreichte Branch-Coverage, was ungetestet bleibt und warum.
6. Einen Refactoring-Plan in kleinen Schritten, jeder mit den Tests überprüfbar, ausgerichtet auf {{ziel}}.
Einschränkungen:
- Ändere die Logik des Codes weder in den Tests noch in den Seams.
- Erfinde kein erwartetes Ergebnis, das sich nicht aus dem Code ableiten lässt: markiere es mit [AUSFÜLLEN: ausführen und echte Ausgabe einfügen] und erkläre, wie ich sie ermittle.
- Verwende sprechende Testnamen (gegeben / wenn / dann).
- Fehlt Code, von dem die Funktion abhängt, frag mich zuerst danach.
Format: nummerierte Abschnitte und lauffähige Codeblöcke.So verwenden Sie ihn
Füge die komplette Funktion oder Klasse ein und nenne bekannte externe Abhängigkeiten. Führe die Tests gegen den unveränderten Code aus: Alle müssen grün sein, bevor das Refactoring beginnt.
Anwendungsbeispiel
Sprache: Python 3.11 mit pytest · Abhängigkeiten: datetime.now() und MySQL-Abfragen · Ziel: eine 300-Zeilen-Funktion zur Provisionsberechnung aufteilen.
Beispielergebnis
Angenommen, die vollständige Funktion liest die Bestellungen des Kunden über PDO und nutzt date() für die Kundendauer…
2. Seams
- Datenbank: optionalen Parameter
?PDO $pdo = nullergänzen, der beinullauf die bisherige Verbindung zurückfällt. - Datum:
?DateTimeImmutable $jetzt = nullergänzen unddate()durch$jetzt->format(...)ersetzen.
Beide Änderungen lassen alle bestehenden Aufrufe unverändert.
3. Charakterisierungstests
<?php
use PHPUnit\Framework\TestCase;
final class BerechneRabattTest extends TestCase
{
private PDO $pdo;
protected function setUp(): void
{
$this->pdo = new PDO('sqlite::memory:');
// Minimales Schema, das die echte Tabelle nachbildet: [AUSFÜLLEN]
$this->pdo->exec('CREATE TABLE bestellungen (kunden_id INT, summe REAL, erstellt_am TEXT)');
}
public function test_gegeben_kunde_ohne_bestellungen_wenn_summe_100_dann_aktuelles_ergebnis(): void
{
$jetzt = new DateTimeImmutable('2025-03-15 10:00:00');
$ergebnis = berechneRabatt(['id' => 42], 100.0, $this->pdo, $jetzt);
$this->assertSame(0.0, $ergebnis); // [AUSFÜLLEN: ausführen und echte Ausgabe einfügen]
}
public function test_gegeben_negative_summe_dann_keine_exception(): void
{
// MÖGLICHER BUG: negative Summe wird nicht abgelehnt; aktuelles Verhalten festschreiben
$ergebnis = berechneRabatt(['id' => 42], -50.0, $this->pdo, new DateTimeImmutable());
$this->assertIsFloat($ergebnis);
}
}
Erst jeden Test ausführen, den echten Wert in die Assertion übernehmen und erst danach mit dem Refactoring beginnen…
Wichtige Fakten
- Kategorie
- Programmierung & Entwicklung · Refactoring
- Ausgabetyp
- Code
- Niveau
- Fortgeschritten
- Entwickelt für
- ChatGPT, Claude, Gemini und Microsoft Copilot
- Verifiziert in
- Redaktionelle Prüfung ausstehend
- Variablen
- Sprache und Test-Framework, Schwierige Abhängigkeiten, Ziel danach und Code
- Sprache
- Deutsch
- Preis
- Kostenlos, ohne Anmeldung
- Aktualisiert
- 07.11.2026
Häufig gestellte Fragen
Was ist ein Charakterisierungstest?
Ein Test, der dokumentiert, was der Code heute tut, nicht was er tun sollte. Er ist ein Sicherheitsnetz: Ändert ein Refactoring ein Ergebnis, schlägt der Test an.
Was, wenn der Code einen offensichtlichen Bug hat?
Halte ihn zuerst in einem als möglicher Bug markierten Test fest und vervollständige das Sicherheitsnetz. Behebe ihn danach in einer separaten Änderung, damit Refactoring und Verhaltensänderung getrennt bleiben.
Wofür ist dieser Prompt gedacht?
Charakterisierungstests für ungetesteten Legacy-Code erstellen: aktuelles Verhalten festhalten, Abhängigkeiten wie Datenbank oder Uhrzeit isolieren und ein sicheres Refactoring planen.
Mit welchen KI-Tools funktioniert er?
Er ist für ChatGPT, Claude, Gemini und Microsoft Copilot entwickelt. Wir haben ihn in diesen Tools noch nicht überprüft, daher können die Ergebnisse variieren.
Wie passe ich den Prompt an?
Klicken Sie auf „Anpassen“ und füllen Sie die Variablen aus (Sprache und Test-Framework, Schwierige Abhängigkeiten, Ziel danach und Code). Der Text wird sofort aktualisiert und lässt sich anschließend mit einem Klick kopieren. Die Werte werden nur in Ihrem Browser gespeichert.
Brauche ich Erfahrung, um ihn zu verwenden?
Er ist für Fortgeschrittene: Es hilft, das Thema zu kennen, um guten Kontext zu liefern und das Ergebnis kritisch zu prüfen.
Ist dieser Prompt kostenlos?
Ja. Jeder Prompt von HomeCasa Prompts ist kostenlos, ohne Anmeldung und ohne Abonnement. Sie können ihn auch in beruflichen Projekten verwenden.
Kann ich der KI-Ausgabe vertrauen?
Betrachten Sie sie als hochwertigen Entwurf: Prüfen Sie Daten, Zahlen und wichtige Aussagen immer, bevor Sie etwas veröffentlichen oder Entscheidungen treffen.