Skip to content

Tester un service

Tester les services avec Mockito

Puisqu'on veut simplement tester la logique des services dans le cas présent, on voudra simuler les repository qui sont utilisés par le service. Cela évitera également de devoir faire des appels à la base de données dans les tests unitaires.

Configuration

  • Créer un dossier repositories sous src/test/{nom du package}
  • Dans ce dossier, créer les classes nécessaires pour tester les services. NomServiceTests
  • Ajouter le décorateur @ExtendWith(MockitoExtension.class) à la classe.


  • Puisqu'on veut simuler les repositories qu'on utilisera, on les ajoute à la configuration de la classe avec le décorateur @Mock
  • On pourra ensuite injecter le service dans la classe de test en utilisant le décorateur @InjectMocks pour injecter les repositories.
@ExtendWith(MockitoExtension.class)
public class ChatServiceTests {
    @Mock
    private ChatRepository chatRepository;

    @InjectMocks
    private ChatService chatService;
}

Écrire les tests

Les tests seront similaires à ceux des contrôleurs. On configurera les appels aux repositories pour indiquer quelles données ils doivent retourner.

Ainsi on s'assure que le service fait l'appel adéquat à ceux-ci et que les données retournées correspondent à ce qu'on s'attend.

Exemple

@ExtendWith(MockitoExtension.class)
public class ChatServiceTests {
    @Mock
    private ChatRepository chatRepository;

    @InjectMocks
    private ChatService chatService;
    @Test
    public void ChatService_findAll_RetourneChats() {
        Chat chat = new Chat(1, "Mitaine", "Gris", 4);
        Chat chat2 = new Chat(2, "Picsou", "Noir et blanc", 3);

        when(chatRepository.findAll()).thenReturn(Arrays.asList(chat, chat2));

        List<Chat> chats = chatService.findAll();

        Assertions.assertNotNull(chats);
        Assertions.assertEquals(2, chats.size());
    }
}