30.14. Développer des API REST avec Spring Boot : tests unitaires et d'intégration
Lors du développement d'une API REST avec Spring Boot, il est essentiel de garantir la qualité du code et la fiabilité des points de terminaison. Un moyen efficace d’atteindre cet objectif consiste à mettre en œuvre des tests unitaires et d’intégration. Dans cette section, nous découvrirons comment créer et exécuter ces tests dans un projet Spring Boot, en garantissant que votre API REST fonctionne comme prévu.
Tests unitaires
Les tests unitaires constituent la base de toute stratégie de test dans le développement de logiciels. Ils sont rapides, isolés et se concentrent sur une petite partie du code, comme les méthodes ou les classes. Dans le contexte de Spring Boot, nous utilisons généralement des frameworks comme JUnit et Mockito pour écrire des tests unitaires.
JUnit
JUnit est un framework de test pour le langage de programmation Java qui nous permet d'écrire et d'exécuter des tests répétables. Avec JUnit, nous pouvons nous assurer que les méthodes de nos classes fonctionnent comme prévu.
Mockito
Mockito est un framework qui vous permet de créer des objets fictifs dans des tests unitaires. Ceci est utile lorsque nous devons tester la logique d'une classe sans s'appuyer sur ses dépendances externes, telles que des bases de données ou d'autres services.
Exemple de test unitaire
@SpringBootTest
classe publique UserServiceTest {
@MockBean
UserRepository privé userRepository ;
@Autowired
service utilisateur privé;
@Test
public void whenSaveUser_thenSuccess() {
Utilisateur user = new User("John Doe", "john.doe@example.com");
Mockito.when(userRepository.save(user)).thenReturn(user);
Utilisateur créé = userService.createUser(user);
assertThat(created.getName()).isEqualTo(user.getName());
assertThat(created.getEmail()).isEqualTo(user.getEmail());
}
}
Dans l'exemple ci-dessus, nous testons la méthode createUser
de UserService
. Nous utilisons @MockBean
pour simuler le UserRepository
et @Autowired
pour injecter l'instance UserService
que nous voulons tester. Avec Mockito, nous simulons le comportement de la méthode save
du référentiel pour renvoyer l'utilisateur que nous créons. De cette façon, nous pouvons vérifier si le service fonctionne correctement sans avoir à interagir avec la base de données.
Tests d'intégration
Les tests d'intégration sont importants pour garantir que les différentes parties du système fonctionnent ensemble. Dans Spring Boot, nous pouvons utiliser le Spring MVC Test Framework pour simuler des appels HTTP à l'API et vérifier le comportement de l'application dans son ensemble.
Cadre de test Spring MVC
Ce framework vous permet d'écrire des tests qui envoient des requêtes HTTP au DispatcherServlet (le contrôleur frontal Spring MVC) et de vérifier les réponses. Grâce à cela, il est possible de tester les contrôleurs, les routes et l'état des réponses sans avoir besoin de déployer l'application sur un vrai serveur Web.
Exemple de test d'intégration
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
classe publique UserControllerIntegrationTest {
@Autowired
privé MockMvc mockMvc ;
@Test
public void whenGetUser_thenStatus200() lève une exception {
mockMvc.perform(get("/users/1"))
.andExpect(statut().isOk())
.andExpect(jsonPath("$.name").value("John Doe"))
.andExpect(jsonPath("$.email").value("john.doe@example.com"));
}
}
Dans l'exemple ci-dessus, nous avons utilisé @SpringBootTest
avec l'option webEnvironment
pour lancer le contexte Spring Boot et rendre un serveur web disponible sur un port aléatoire. Avec @AutoConfigureMockMvc
, Spring Boot configure automatiquement MockMvc
, qui est un point central pour les tests d'intégration dans Spring MVC. Nous utilisons MockMvc
pour simuler une requête GET au point de terminaison /users/1
et vérifions si la réponse a le statut HTTP 200 (OK), en plus de vérifier si le contenu de la réponse contient les données attendues.
Considérations finales
Les tests unitaires et d'intégration sont fondamentaux dans le développement d'API REST avec Spring Boot. Ils permettent de garantir que chaque partie du code fonctionne de manière isolée et que toutes les parties fonctionnent ensemble comme prévu. En utilisant des frameworks tels que JUnit et Mockito, ainsi que les capacités du Spring MVC Test Framework, vous pouvez créer un ensemble de tests robustes qui augmenteront la confiance dans votre code et réduiront le risque de bogues en production.
De plus, une stratégie de tests bien définie facilite la maintenance et l'évolution de l'application, car tout changement qui interrompt les fonctionnalités existantes sera rapidement identifié par des tests. Alors investissez du tempset des ressources pour écrire et maintenir des tests de qualité, et votre API REST avec Spring Boot sera beaucoup plus solide et fiable.