Aller au contenu principal

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. no Mocks

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

    with Mocks

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