Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Défi : Test Unitaire | Tester les Applications Backend
Backend Spring Boot
course content

Contenu du cours

Backend Spring Boot

Backend Spring Boot

1. Notions de Base du Développement Backend
2. Notions de Base de Spring Boot
3. API RESTful
4. Travailler avec des Bases de Données
5. Tester les Applications Backend

book
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.

java

BookService

copy
1234567
@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.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 4
We're sorry to hear that something went wrong. What happened?
some-alt