Dernière modification : Dec 08 , 2024

Comment tester la couche de données ?

Plusieurs problématiques

  • Que faire du serveur de base de données ?
  • Comment gérer les données ?
  • Isoler les requêtes

Que faire du serveur de base de données ?

En fonction du type d'architecture applicative utilisé, il est possible :

  • Remplacer le module de persistance par un stub
  • Utiliser un émulateur de base de données compatible avec celle de production (serveur embarqué comme HSQLDB, H2)
  • Utiliser un container de tests (TestContainer) qui exécute pour le test, le serveur du même type que la production mais adaptés aux tests.

Exemples de serveurs de base de données embarquées

Les bases de données H2 et HSQLDB permettent de démarrer votre application. Elles supportent divers SGBD bien que partiellement.

Comment gérer les données ?

Une autre problématique importante est la création d'un jeu de données de test et sa maintenance et son chargement.

La plupart des données de tests viennent de production après anonymisation.

Problème 1 : On ne sait pas vraiment ce qu'il y a dans un extrait de la production

Problème 2 : Il faut extraire des scénarios de tests (des données) pertinentes

Problème 3 : Les données sont parfois trop importantes pour être utilisées dans les tests (lenteur, espace disque etc)

DBUnit est un framework Java qui permet de charger des données fragmentaires dans une base de données

JDBT est un framework Java qui tester des applications avec base de données. Le framework prend en charge particulièrement le démarrage du test et des ses données.

Isoler les requêtes

L'API JDBC est complexe et difficile à mocker. La recommandation générale est d'avoir une abstraction au-dessus de JDBC pour simplifier le test.

JOOQ

JOOQ est un framework qui génère une API au-dessus de votre base de données afin d'en faciliter la manipulation. Par conséquent, il est facile de réaliser des tests en mockant / stubbant la couche DAO.

Hibernate/JPA

Il est assez aisé de mocker les interfaces EntityManager, SessionManager, Session pour couvrir les appels bas-niveaux. Les mocks peuvent être faits avec Mockito ou en simple Java.

MyBatis

L'interface Mapper et ses sous-interfaces est simple à mocker.

Patrons de conception

Il existe plusieurs patrons de conceptions utiles pour tester la couche de données.

  • La mise en place du patron Repository en DDD ou du pattern DAO lien
  • Le patron de conception ActiveRecord

Comment tester la couche de données ?

Created by Sylvain Leroy


Documentation et resources