Question d'entretien pour Développeur Java

Comment testez-vous un service Spring qui utilise une base de données et appelle une autre API ?

Ce que le recruteur cherche à évaluer, comment structurer votre réponse et un exemple parlé à adapter.

Réponse rapide

Testez la logique métier avec du JUnit simple et sans contexte Spring, puisque l'injection par constructeur rend cela trivial. Testez la persistance contre une vraie base dans un conteneur plutôt qu'un substitut en mémoire, parce que les dialectes diffèrent et que les migrations doivent être testées aussi. Utilisez des tranches de test plutôt que de démarrer toute l'application pour les tests de contrôleur ou de repository, et bouchonnez l'API externe au niveau HTTP pour que votre code client, les reprises et le parsing s'exécutent vraiment.

Pourquoi les recruteurs posent cette question

Le recruteur veut savoir si vos tests attrapent des régressions ou s'ils ne font qu'exercer des mocks. Préférer une vraie base en conteneur à une base en mémoire, utiliser des tranches plutôt qu'un contexte complet pour la vitesse, et bouchonner à la frontière HTTP plutôt que mocker votre propre repository sont autant de signes d'une suite à laquelle les gens font confiance. Le temps d'exécution compte aussi, puisqu'une suite lente finit par être sautée.

Comment structurer votre réponse

  • Découpez les couches et associez un style de test à chacune.
  • Utilisez une vraie base en conteneur et exécutez les migrations dans le test.
  • Bouchonnez le HTTP externe plutôt que mocker votre propre client.
  • Gardez la suite rapide et isolée pour qu'elle reste crédible.

Exemple de réponse

Exemple parlé, à la première personne

L'essentiel de la logique reçoit de simples tests unitaires sans aucun framework : l'injection par constructeur veut dire que je peux instancier la classe avec des doublures pour ses collaborateurs et que ça tourne en millisecondes. Pour la persistance j'utilise une vraie base, du même moteur et de la même version, dans un conteneur, avec les migrations appliquées au montage du test, si bien que la migration elle-même est vérifiée à chaque exécution. Une base en mémoire est plus rapide mais elle ment sur les dialectes et les contraintes, et j'ai livré une requête qui marchait dans les tests et échouait en production à cause de ça. Pour la couche web j'utilise une tranche qui charge juste le contrôleur et la sérialisation, pas toute l'application, parce que tout démarrer à chaque test est ce qui fait durer une suite vingt minutes. L'API externe est bouchonnée au niveau HTTP avec un serveur simulé, donc ma configuration client, mes délais, ma logique de reprise et mon mapping JSON sont exercés pour de vrai. Je réutilise aussi les conteneurs sur toute l'exécution et j'annule chaque test dans une transaction, ce qui garde les choses isolées et parallélisables.

Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.

Voir comment ça marche

Questions de relance à prévoir

  • Pourquoi ne pas utiliser une base en mémoire pour la vitesse ?
  • Comment testez-vous le comportement de reprise et d'expiration de votre client ?
  • Que vérifiez-vous pour attraper une requête N plus un dans un test ?

Autres questions pour Développeur Java

Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.

Prédire mes questions

Répétez les questions difficiles avant qu'on vous les pose

Entraînez-vous avec un copilote en direct, puis présentez-vous prêt. Un Session Pass à $29 vous accompagne pendant l'entretien, sans abonnement et sans engagement.

Obtenir GhostPilot