Contenu du cours
Backend Spring Boot
Backend Spring Boot
Défi : Test Unitaire
Tâche
Nous approchons de la fin de ce cours, et pour conclure notre application, je vous propose de terminer l'écriture de tous les tests unitaires pour les couches contrôleur et service.
Explication de la Tâche
Vous devez tester toutes les méthodes dans les couches contrôleur et service qui n'ont pas encore de tests écrits pour elles. Pour cela, je recommande d'utiliser JUnit
avec la bibliothèque Mockito
.
Directives pour l'Écriture de Tests avec JUnit
Voici quelques méthodes clés que vous trouverez utiles :
assertNotNull(result)
: Assure que le résultat d'un appel de méthode n'est pas null
, confirmant que l'opération a été réussie ;
assertEquals(expected, actual)
: Compare la valeur attendue avec la valeur réelle pour vérifier que les données correctes sont retournées ;
assertTrue(condition)
: Vérifie qu'une condition est vraie, par exemple, s'assurer qu'une liste de livres est vide s'il n'y a aucun enregistrement dans la base de données ;
verify(mock).methodCall()
: Vérifie qu'une méthode spécifique sur un objet simulé a été appelée avec les paramètres attendus, validant l'interaction entre les composants ;
when(mock.methodCall()).thenReturn(value)
: Configure un mock pour retourner une certaine valeur lorsqu'une méthode est appelée, simulant les dépendances dans vos tests.
Test des contrôleurs
Ici, des tests ont déjà été écrits pour les méthodes findAllBooks
, findByAuthor
, createBook
, et updateBook
. Vous devrez écrire des tests pour la méthode restante. Voici quelques conseils pour vous aider à implémenter le test pour cette méthode.
deleteBooks(String id)
Pour la méthode deleteBooks(String id)
, vous devez vérifier que la méthode de suppression est appelée avec le id
correct et tester la gestion des erreurs lors de la tentative de suppression d'un livre inexistant. Pour une réponse réussie, vérifiez uniquement le statut ; pour les erreurs, vérifiez à la fois le statut et le message d'erreur.
BookService
@Transactional public void deleteBook(String id) { if(!bookRepository.existsById(id)) { throw new ApiException("Not found by id: " + id, HttpStatus.NOT_FOUND); } bookRepository.deleteById(id); }
Pour le contrôleur, vous devrez écrire deux tests pour cette méthode : un pour la suppression réussie et un autre pour quand un 404 status
est retourné.
Gardez à l'esprit que la méthode de service que nous allons simuler ne retourne rien, tout comme le contrôleur.
Vous pouvez utiliser la méthode doNothing()
pour simuler une méthode void
, en vous assurant qu'aucune action n'est effectuée lors de son invocation. La syntaxe est :
Lorsque vous devez gérer un scénario où une exception est lancée, utilisez doThrow()
. Cette méthode dans Mockito
simule le lancement d'une exception à partir d'une méthode void
. La syntaxe est :
Test de Service
deleteBook(String id)
La méthode deleteBook(String id)
nécessite une validation pour assurer que la méthode de suppression du livre est appelée avec le id
correct. De plus, il est essentiel de tester comment la méthode gère la situation lorsqu'un livre avec le id
spécifié n'est pas trouvé.
Vous devrez implémenter deux tests : un où l'entité est trouvée par id
et supprimée, et un autre où une exception est levée.
Que faire si vous ne pouvez pas écrire de tests ?
C'est tout à fait normal si vous n'avez pas compris le sujet lors de votre première tentative ; vous pourriez avoir besoin de relire les concepts de test. Je recommande également de revoir la solution de cet exercice.
Merci pour vos commentaires !