- Startseite
- Skills
- Testen
- Integrationstest-Schreiber
Integrationstest-Schreiber
Effektive Integrationstests schreiben, die das Zusammenspiel von Komponenten verifizieren — Datenbanken, APIs und Services.
Das Problem
Unit-Tests pruefen einzelne Funktionen, aber Produktionsfehler leben oft in den Luecken zwischen Komponenten. Eine Funktion arbeitet isoliert perfekt, versagt dann aber, wenn die Datenbank null zurueckgibt, die API ihr Antwortformat aendert oder der Cache veraltete Daten liefert. Integrationstests zu schreiben ist schwieriger, da realistische Setups, sauberes Teardown und Wissen darueber noetig sind, welche Interaktionspunkte wirklich relevant sind.
Der Prompt
Schreibe Integrationstests fuer die folgende Systeminteraktion. Diese Tests sollen verifizieren, dass Komponenten korrekt zusammenarbeiten, nicht isoliert.
SYSTEM UNTER TEST:
[Interaktion beschreiben — z.B. "Benutzerregistrierung: API-Endpunkt → Validierung → Datenbank-Insert → E-Mail-Service → Antwort"]
BETEILIGTE KOMPONENTEN:
[Services, Datenbanken, APIs, Queues etc. auflisten]
TECH-STACK:
[z.B. Express + PostgreSQL + Redis + SendGrid]
TEST-FRAMEWORK: [z.B. Jest + Supertest, pytest + httpx]
Fuer jeden Integrationspunkt Tests schreiben fuer:
1. **Happy Path** — vollstaendiger Flow erfolgreich End-to-End
2. **Teilausfall** — eine Komponente schlaegt fehl, andere reagieren korrekt
3. **Datenkonsistenz** — Zustand ueber alle Komponenten nach der Operation verifizieren
4. **Bereinigung/Rollback** — fehlgeschlagene Operationen hinterlassen keine verwaisten Daten
5. **Timing** — Timeout-Handling und Retry-Verhalten testen
Einschliessen:
- Test-Setup mit realistischen Fixtures (keine minimalen Stubs)
- Sauberes Teardown zur Vermeidung von Test-Kontamination
- Kommentare, die erklaeren, WELCHE Integrationsgrenze jeder Test verifiziert
- Transaktionshandling oder Datenbank-Reset zwischen Tests
Beispielausgabe
describe('Benutzerregistrierung Integration', () => {
beforeEach(async () => {
await db.migrate.latest();
await db('users').truncate();
});
it('soll Benutzer in DB anlegen und Willkommens-E-Mail bei gueltiger Registrierung senden', async () => {
const res = await request(app).post('/api/register')
.send({ email: 'neu@example.com', password: 'Stark!Pass1' });
expect(res.status).toBe(201);
const user = await db('users').where({ email: 'neu@example.com' }).first();
expect(user).toBeDefined();
expect(emailService.sendWelcome).toHaveBeenCalledWith('neu@example.com');
});
// Verifiziert: DB-Rollback wenn E-Mail-Service fehlschlaegt
it('soll Benutzeranlage rueckgaengig machen, wenn E-Mail-Service einen Fehler wirft', async () => {
emailService.sendWelcome.mockRejectedValueOnce(new Error('SMTP nicht erreichbar'));
const res = await request(app).post('/api/register')
.send({ email: 'fehler@example.com', password: 'Stark!Pass1' });
expect(res.status).toBe(503);
const user = await db('users').where({ email: 'fehler@example.com' }).first();
expect(user).toBeUndefined(); // kein verwaister Datensatz
});
});
Wann verwenden
Einsetzen beim Bauen von Features, die mehrere Services umfassen, nach einem Produktionsvorfall durch eine Komponenteninteraktion oder bei der Migration von Monolith zu Microservices. Integrationstests sind das Sicherheitsnetz fuer die Naehte zwischen Komponenten, die Unit-Tests nicht erreichen koennen.
Profi-Tipps
- Testcontainers verwenden — echte Datenbanken und Services in Docker starten statt sie zu mocken. KI kann das vollstaendige Testcontainers-Setup fuer Ihren Stack generieren.
- Den Vertrag testen, nicht die Implementierung — verifizieren, dass API-Antwortformat und Datenbankzustand korrekt sind, nicht interne Funktionsaufrufe.
- Schnelle und langsame Tests trennen — Integrationstests taggen, damit sie in CI laufen, aber nicht bei jedem Dateispeichern. KI nach der passenden Test-Runner-Konfiguration fragen.
- Eine Fehlermatrix anfordern — vor dem Testschreiben prompten: “Liste jeden Weg auf, wie Komponente A beim Aufruf von Komponente B fehlschlagen kann.”