Skip to content

Tester un repository

Tester les repository avec H2

Afin de bien tester le fonctionnement des interactions avec la base de données sans avoir besoin d'altérer celle-ci, nous utiliserons une base de données en mémoire: H2.

De cette façon, aucune requête ne sera réellement faite à la vraie base de données. Il sera aussi possible de contrôler les données présentes dans la base de données en mémoire afin de créer des tests déterministes.

Configuration

Il faudra tout d'abors ajouter ne dépendance Maven au fichier pom.xml pour la base de données de test.

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>test</scope>
</dependency>
  • Créer un dossier repositories sous src/test/{nom du package}
  • Créer un dossier resources sous src/test
  • Dans le dossier resources créé, ajoutez un fichier application.properties.
  • On veut éviter d'exécuter des scripts de seeding de la base de données alors dans ce fichier on ajoutera spring.sql.init.mode=never

Créer les tests

  • Dans le dossier repositories créer une nouvelle classe NomRepositoryTests.
  • À cette classe on ajoute le décorateur @DataJpaTest et @AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
  • On ajoute aussi le repository à tester avec le décorateur @Autowired
@DataJpaTest
@AutoConfigureTestDatabase(connection =  EmbeddedDatabaseConnection.H2)
public class ChatRepositoryTests {

    @Autowired
    ChatRepository chatRepository;
}
  • Une méthode de test doit avoir le décorateur @Test
  • On nomme la méthode NomRepository_MethodeTeste_ResultatAttendu
  • On débute chaque test avec une base de données vide, il faudra donc ajouter des informations si on veut tester la sélection de celles-ci.
@Test
public void ChatRpository_findAll_RetourneTout() throws Exception {
    Chat chat1 = new Chat(null, "Mitaine", "Gris", 4);
    Chat chat2 = new Chat(null, "Picsou", "Noir et blanc", 4);

    Chat savedChat1 = chatRepository.save(chat1);
    Chat savedChat2 = chatRepository.save(chat2);

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

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

}