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
repositoriessoussrc/test/{nom du package} - Créer un dossier
resourcessoussrc/test - Dans le dossier
resourcescréé, ajoutez un fichierapplication.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
repositoriescréer une nouvelle classeNomRepositoryTests. - À cette classe on ajoute le décorateur
@DataJpaTestet@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());
}