- Startseite
- Skills
- Testen
- Datenbank-Test-Stratege
Testen
Datenbank-Test-Stratege
Datenbankoperationen zuverlaessig testen — Migrationen, Transaktionen, Constraints und Datenintegritaet ueber Testlaeufe.
Fortgeschritten Kostenlos Veroeffentlicht: 15. April 2026
Kompatible Tools claude-codechatgptgeminicopilotcursorwindsurfuniversal
Das Problem
Datenbanktests sind am schwierigsten korrekt umzusetzen. Tests kontaminieren einander mit gemeinsamen Daten, Transaktionen lecken, Migrationen laufen in falscher Reihenfolge und Testdatenbanken driften vom Produktionsschema ab. Eine solide Strategie isoliert Tests, verifiziert Constraints und laeuft schnell genug fuer CI.
Der Prompt
Entwirf eine Datenbank-Teststrategie fuer meine Anwendung. Ich brauche Tests, die echtes Datenbankverhalten verifizieren, ohne langsam oder fragil zu sein.
DATENBANK: [PostgreSQL / MySQL / MongoDB / SQLite]
ORM/QUERY-LAYER: [Prisma / TypeORM / Drizzle / Knex / raw SQL]
SCHEMA: [Schema/Migrationen einfuegen]
Generieren:
1. **Testdatenbank-Setup** — Isolierte Testdatenbank, Transaktionsbasierte Isolation, Seed-Daten-Strategie
2. **Migrationstests** — Vorwaerts- und Rueckwaerts-Migrationen verifizieren
3. **Constraint-Tests** — Unique, Foreign Key, NOT NULL, Check Constraints testen
4. **Query-Tests** — Komplexe Abfragen, Joins, Filter, Paginierung testen
5. **Nebenlaeufigkeitstests** — Parallele Updates, Optimistic Locking, Deadlocks
Beispielausgabe
describe('Benutzer-Datenbankoperationen', () => {
beforeEach(async () => { await db.query('BEGIN'); });
afterEach(async () => { await db.query('ROLLBACK'); });
it('soll Unique-E-Mail-Constraint durchsetzen', async () => {
await createUser({ email: 'belegt@test.com' });
await expect(createUser({ email: 'belegt@test.com' }))
.rejects.toThrow(/unique constraint/i);
});
it('soll Bestellungen kaskadierend loeschen bei Benutzerloeschung', async () => {
const user = await createUser({ email: 'loeschen@test.com' });
await createOrder({ userId: user.id });
await deleteUser(user.id);
const orders = await db.query('SELECT * FROM orders WHERE user_id = $1', [user.id]);
expect(orders.rows).toHaveLength(0);
});
});
Wann verwenden
Wenn die Anwendung auf komplexen Datenbankabfragen basiert, Datenbank-Constraints verifiziert werden muessen oder ein neues Projekt mit Datenbankschicht eingerichtet wird.
Profi-Tipps
- Transaktions-Rollback ist die schnellste Isolation — jeden Test in eine Transaktion packen und danach zurueckrollen.
- Mit realistischen Datenmengen testen — eine Query die mit 10 Zeilen funktioniert kann bei 10.000 versagen.
- Testcontainers fuer echte Datenbanken verwenden — SQLite ist nicht PostgreSQL. Gegen die gleiche Engine testen wie in Produktion.
- Seed-Daten versionieren — Seed-Daten-Skripte neben Migrationen pflegen, damit sie sich gemeinsam entwickeln.