Tester un service
Unit Test
Les tests unitaires (UT) consistent à tester de petites unités de code de manière isolée.
Un Test n'est pas un TU si:
- Il communique avec la base de données ou réseau
- Il touche le système de fichiers, ou les de config de l'app
- Il ne peut pas être exécuté en même temps que les autres tests unitaires.
C'est pour ces raisons on va pas utiliser Spring boot pour les TU sur vasco, parce que l'annotation @SpringBootTest va charger le contexte d'application globale pour le test.
CA veut dire, on a démarré toute l'application uniquement pour injecter un service.
Pareil pour @MockBean, pour la simple raison à chaque fois on l'utilise dans les tests, Spring va créer un nouveau contexte d'app vue qu'il ne peut pas caché une version de contexte.
Tester un Service
-
Sans @Mock: Spring injecte automatiquement la class DAO dans le service via le constructeur, il suffit juste de passer au constructeur le Repo comme param.
-
Avec @Mock :
Puisqu'on va pas tester la couche DAO, on va Mocker le retour de la base d donnée, c'est pour cette raison on utilise Mockito, il suffit juste d'ajouter @ExtendWith + @Mock
@Mock vs @InjectMocks: la premiere crée un Mock pour la class accountRepo, la 2eme crée une instance de service et injecte le repo.
Exemple de Test Unitaire
@Test void findUser_should_return_responseObject() {
//simuler une DB en mémoire
//simuler JSON
when(accountRepository.findByLogin(account.getLogin()))
.thenReturn(account);
verify(accountRepository, times(1)).findLogin();
UserResponse response = service
.findUserForAuthentication(account.getLogin());
assertEquals("toto", response.getName());
assertNotNull(response.getMail());
}
La méthode statique assert est founie par JUnit, je vous laisse dans les ressource un lien vers la doc officielle de JUnit 5
Ressources
https://www.arhohuttunen.com/junit-5-mockito/
https://junit.org/junit5/docs/5.0.1/api/org/junit/jupiter/api/Assertions.html