Test gegen eine echte Datenbank im Container statt die Datenschicht zu mocken, denn die meisten Bugs stecken in Queries, Migrationen und Transaktionen, die ein Mock nicht ausdrücken kann. Externe APIs mockst du an der Transportgrenze mit aufgezeichneten oder gestubbten HTTP-Antworten, damit dein eigener Client-Code wirklich läuft, und du ergänzt ein kleines Set an Contract Tests gegen den echten Service, um Abweichungen zu erkennen. Halt Tests isoliert, mit einer Transaktion pro Test oder frischen Schemas.
Warum Interviewer das fragen
Der Interviewer will wissen, ob deine Tests eine Regression tatsächlich fangen würden. Die Repository-Schicht zu mocken erzeugt Suites, die grün sind, während Produktion bricht, er achtet also auf echtes Datenbanktesten, HTTP-Stubs auf Grenzebene und einen Plan, wie du merkst, dass ein Drittanbieter etwas ändert. Geschwindigkeit und Isolation zählen ebenfalls, denn eine langsame oder flaky Suite wird übersprungen, egal wie gründlich sie ist.
So baust du deine Antwort auf
- Nenn das Prinzip: mocke an der Prozessgrenze, nicht im eigenen Code.
- Nutz eine echte Datenbank im Container und erklär die Isolation zwischen Tests.
- Behandel Drittanbieter-APIs mit gestubbtem Transport plus Contract Checks.
- Geh auf Tempo und Flakiness ein, damit Leute die Suite weiter laufen lassen.
Beispielantwort
Meine Regel ist, am Rand meines Prozesses zu mocken und nicht innerhalb. Die Datenbank ist also echt, im Container mit derselben Engine und Version wie Produktion, und die Migrationen laufen zu Beginn des Durchlaufs, womit auch die Migration selbst jedes Mal getestet wird. Jeder Test läuft in einer Transaktion, die zurückgerollt wird, oder bekommt sein eigenes Schema, wenn er committen muss, so bleiben Tests isoliert und können parallel laufen. Das Repository zu mocken gäbe mir grüne Tests, die nichts beweisen, denn die Bugs, die ich tatsächlich ausliefere, stecken in Queries, Constraints und Transaktionsgrenzen. Bei einer externen API stubbe ich auf HTTP-Ebene mit aufgezeichneten Antworten, sodass mein Client, meine Retry-Logik und mein Parsing wirklich laufen; ich gehe nur nicht ins Netz. Weil Aufzeichnungen veralten, fahre ich zusätzlich eine kleine Contract-Suite gegen deren Sandbox nach Zeitplan, nicht bei jedem Pull Request, damit ich von einer Änderung durch einen fehlgeschlagenen Job erfahre und nicht durch einen Alert um drei Uhr nachts.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Wie hältst du die Suite schnell, sobald eine echte Datenbank im Spiel ist?
- Wie testest du einen Fehlermodus wie ein Timeout dieser API?
- Was machst du mit Tests, die von Zeit oder Reihenfolge abhängen?
Weitere Fragen für Backend-Entwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen