Interviewfrage für Java-Entwickler

Wie testest du einen Spring-Service, der eine Datenbank nutzt und eine andere API aufruft?

Worauf der Interviewer abzielt, wie du deine Antwort aufbaust und ein gesprochenes Beispiel zum Anpassen.

Kurzantwort

Test die Domänenlogik mit schlichtem JUnit ohne Spring-Kontext, denn Constructor Injection macht das trivial. Test Persistenz gegen eine echte Datenbank in einem Container statt gegen einen In-Memory-Ersatz, denn Dialekte unterscheiden sich und Migrationen müssen ebenfalls getestet werden. Nimm Test Slices, statt für Controller- oder Repository-Tests die ganze Anwendung hochzufahren, und stub die externe API auf HTTP-Ebene, damit dein Client-Code, die Retries und das Parsing wirklich laufen.

Warum Interviewer das fragen

Der Interviewer will wissen, ob deine Tests Regressionen fangen oder nur Mocks bewegen. Eine echte Datenbank im Container einer In-Memory-Variante vorzuziehen, Slices statt vollem Kontext für Geschwindigkeit zu nutzen und auf HTTP-Ebene zu mocken statt das eigene Repository, sind alles Zeichen einer Suite, der Leute tatsächlich vertrauen. Die Laufzeit zählt ebenfalls, denn eine langsame Suite wird übersprungen.

So baust du deine Antwort auf

  • Trenn die Schichten und ordne jeder einen Teststil zu.
  • Nimm eine echte Datenbank im Container und lass Migrationen im Test laufen.
  • Stub externes HTTP, statt deinen eigenen Client zu mocken.
  • Halt die Suite schnell und isoliert, damit sie glaubwürdig bleibt.

Beispielantwort

Gesprochenes Beispiel, erste Person

Der Großteil der Logik bekommt schlichte Unit-Tests ganz ohne Framework: Constructor Injection heißt, ich kann die Klasse mit Test-Doubles für ihre Mitspieler instanziieren und sie läuft in Millisekunden. Für Persistenz nehme ich eine echte Datenbank derselben Engine und Version in einem Container, mit Migrationen als Teil des Test-Setups, damit die Migration selbst bei jedem Lauf verifiziert wird. Eine In-Memory-Datenbank ist schneller, aber sie lügt über Dialekte und Constraints, und ich habe deswegen schon eine Query ausgeliefert, die im Test lief und in Produktion scheiterte. Für die Web-Schicht nutze ich eine Slice, die nur den Controller und die Serialisierung lädt, nicht die ganze Anwendung, denn für jeden Test alles hochzufahren ist der Grund, warum Suites zwanzig Minuten brauchen. Die externe API wird auf HTTP-Ebene mit einem Mock-Server gestubbt, damit meine Client-Konfiguration, Timeouts, Retry-Logik und JSON-Mapping echt durchlaufen. Ich nutze Container über den Lauf hinweg wieder und rolle jeden Test in einer Transaktion zurück, was Isolation und Parallelisierbarkeit erhält.

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 es

Nachfragen, mit denen du rechnen solltest

  • Warum keine In-Memory-Datenbank für die Geschwindigkeit?
  • Wie testest du das Retry- und Timeout-Verhalten deines Clients?
  • Was prüfst du, um eine N-plus-eins-Query in einem Test zu fangen?

Weitere Fragen für Java-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

Üb die harten Fragen, bevor sie gestellt werden

Trainier mit einem Live-Copiloten und geh dann vorbereitet rein. Ein $29 Session Pass bringt dich durch das Vorstellungsgespräch, ohne Abo und ohne Bindung.

GhostPilot holen