Successfully reported this slideshow.
Your SlideShare is downloading. ×

cours-JUnit-CRUD-SPRING-BOOT.pdf

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
JUnit Tests Pour Spring Data JPA (Test CRUD operations)
Petit histoire !
JUnit est un framework de test unitaire pour le l...
Exemple :
@Before et @After
Utilisez respectivement les annotations @Before et @After pour les méthodes
“setup” et “tearDo...
Voyons un exemple de @DataJpaTest :
injecter un TestEntityManager et ProductRepository. TestEntityManager est un sous-
ens...
Advertisement
Advertisement
Upcoming SlideShare
J Unit
J Unit
Loading in …3
×

Check these out next

1 of 11 Ad

More Related Content

Similar to cours-JUnit-CRUD-SPRING-BOOT.pdf (20)

Advertisement

Recently uploaded (20)

cours-JUnit-CRUD-SPRING-BOOT.pdf

  1. 1. JUnit Tests Pour Spring Data JPA (Test CRUD operations) Petit histoire ! JUnit est un framework de test unitaire pour le langage de programmation Java, créé par Kent Beck et Erich Gamma. JUnit définit deux types de fichiers de tests. Les TestCase (cas de test) sont des classes contenant un certain nombre de méthodes de tests. Un TestCase sert généralement à tester le bon fonctionnement d'une classe. Une TestSuite permet d'exécuter un certain nombre de TestCase déjà définis. Dans un TestCase il n'y a pas de main méthod, chaque test étant indépendant. Dans ce cours, vous apprendrez à écrire des tests unitaires pour un projet Spring Boot qui utilise Spring Data JPA et Hibernate pour la couche d'accès aux données. Je partagerai également avec vous comment j'écris du code pour tester les opérations CRUD d'un référentiel Spring Data JPA. J'utiliserai JUnit 5 (JUnit Jupiter) dans un projet Spring Boot avec Spring Data JPA, Hibernate et la base de données MySQL. Annotations pour les tests unitaires Spring Data JPA Lors du codage de la couche d'accès aux données, vous pouvez tester uniquement les référentiels Spring Data JPA sans tester une application Spring Boot entièrement chargée. Spring Boot fournit les annotations suivantes que vous pouvez utiliser pour tester les référentiels JPA: @Test Permet de marquer vos tests. Vous n'avez alors plus besoin de préfixer vos cas de tests avec "test". De plus, votre classe n'a plus besoin d'hériter de la classe “TestCase”. Formateur Jaouad Assabbour
  2. 2. Exemple : @Before et @After Utilisez respectivement les annotations @Before et @After pour les méthodes “setup” et “tearDown”. Ces méthodes sont exécutées respectivement avant et après chaque cas de test. Exemple : Ici, on vient de préparer le "monde" du test. @DataJpaTest : Cette annotation désactivera la configuration automatique complète et n'appliquera à la place que la configuration pertinente pour les tests JPA. Par défaut, il utilisera une base de données H2 intégrée en mémoire au lieu de celle déclarée dans le fichier de configuration, pour un temps d'exécution de test plus rapide par rapport à la base de données de fichiers sur disque. Formateur Jaouad Assabbour
  3. 3. Voyons un exemple de @DataJpaTest : injecter un TestEntityManager et ProductRepository. TestEntityManager est un sous- ensemble de JPA EntityManager. Cela nous permet de tester rapidement JPA sans avoir besoin de configurer/instancier manuellement une EntityManagerFactory et EntityManager. Et ProductRepository est le référentiel qui doit être testé, avec la classe d'entités Product. La classe générée par Spring Data JPA est très bien implémentée, c'est donc pour tester les classes d'entités et les méthodes personnalisées dans les interfaces de référentiel. Vous voyez également que j'utilise la méthode d'assertion de AssertJ pour des déclarations d'assertion plus lisibles et significatives - au lieu de celles de Junit : Formateur Jaouad Assabbour
  4. 4. Notez que par défaut, les tests utilisant @DataJpaTest sont transactionnels et annulent à la fin de chaque méthode de test. Si vous souhaitez désactiver la restauration automatique pour l'ensemble de la classe de test, annotez la classe avec l'annotation @Rollback comme suit : Ou vous pouvez désactiver sélectivement la restauration au niveau de la méthode. Par exemple: @AutoConfigureTestDatabase: Par défaut, l'annotation @DataJpaTest remplace la configuration de base de données déclarée par une base de données en mémoire (H2), ce qui est utile lors de l'exécution de tests qui ne touchent pas à la base de données réelle. Lorsque vous souhaitez exécuter des tests sur une base de données réelle, utilisez @AutoConfigureTestDatabase comme suit : Ensuite, Spring Boot utilisera la source de données déclarée dans le fichier de configuration de l'application. Formateur Jaouad Assabbour
  5. 5. passons en revue un exemple de projet Spring Boot qui utilise des tests unitaires pour Spring Data JPA. Dépendances requises Si vous créez un projet Spring Boot à l'aide de Spring Tool Suite IDE ou directement à partir de Spring Initializr, le test de démarrage Spring Boot de dépendance est inclus par défaut. Et nous devons ajouter des dépendances pour la base de données en mémoire (H2) et la base de données réelle (MySQL). Formateur Jaouad Assabbour
  6. 6. Classe d'entité de code Créez une classe d'entité nommée Product avec le code suivant : Comme vous pouvez le voir, il s'agit d'une simple classe d'entités avec seulement 3 champs : id, name et price. Les getters et les setters ne sont pas représentés par souci de concision. Nous utiliserons l'ingénierie avancée d'Hibernate pour créer la table correspondante dans la base de données lors de l'exécution des tests. Interface du référentiel de code Comme nous utilisons Spring Data JPA avec Hibernate, codez l'interface ProductRepository comme suit : Formateur Jaouad Assabbour
  7. 7. les méthodes CRUD par défaut étendues de CrudRepository, nous déclarons une méthode personnalisée findByName() , et par convention, cette méthode renverra un objet Product par son nom. Configurer les propriétés de connexion à la base de données Ensuite, ouvrez le fichier de configuration Spring Boot (application.properties) et spécifiez les propriétés de connexion à la base de données comme suit : Assurez-vous que vous avez créé le schéma de base de données nommé test sur le serveur MySQL. Notez que nous spécifions la valeur create pour la propriété spring.jpa.hibernate.ddl-auto, donc Hibernate créera la table de base de données au démarrage. Et il supprimera la table si elle existe Tests de code pour les opérations CRUD Créez la classe ProductRepositoryTests sous le répertoire src/test/java avec le code initial comme suit : Comme vous pouvez le voir, cette classe exécutera des tests avec la base de données réelle. Formateur Jaouad Assabbour
  8. 8. Et maintenant, écrivons des méthodes de test pour tester les opérations CRUD de ProductRepository. Tester l'opération de création : Le premier est pour tester l'enregistrement d'un nouveau produit : J'utilise @Rollback(false) pour désactiver la restauration des données qui seront validées dans la base de données et disponibles pour les prochaines méthodes de test qui s'exécuteront séparément. Et j'utilise la méthode assertThat() de la bibliothèque AssertJ pour plus de lisibilité que d'utiliser les méthodes d'assertion de JUnit. Vous devez donc ajouter les importations suivantes : Exécutez cette première méthode de test et vous verrez qu'Hibernate imprime la sortie suivante : Tester l'opération de récupération : Avant d'écrire le deuxième test, définissez la propriété spring.jpa.hibernate.ddl-auto a none afin qu'Hibernate ne supprime pas la table lors de la prochaine exécution. Nous voulons conserver les données pour les tests de sous-séquence. Formateur Jaouad Assabbour
  9. 9. Codez la deuxième méthode de test pour tester la recherche d'un produit par son nom, comme suit: Exécutez cette méthode de test et vous verrez qu'Hibernate imprime l'instruction SQL SELECT comme suit : Ensuite, écrivez la troisième méthode de test pour tester la récupération de tous les produits, avec le code suivant : Exécutez ce test et vous verrez qu'Hibernate imprime l'instruction SQL suivante : Tester l'opération de mise à jour : Ensuite, codons la quatrième méthode de test pour tester la mise à jour d'un produit, avec le code suivant : Formateur Jaouad Assabbour
  10. 10. Comme vous pouvez le voir, nous obtenons d'abord le produit par son nom, puis mettons à jour son prix. Ensuite, nous récupérons le produit et comparons le prix. Exécutez ce test, vous verrez qu'Hibernate imprime les instructions SQL suivantes : Tester l'opération de suppression : La dernière méthode de test consiste à tester la suppression d'un produit. Codez cette méthode comme suit : Exécutez ce test et vous verrez qu'Hibernate imprime les instructions SQL suivantes : Formateur Jaouad Assabbour
  11. 11. Nous avons donc codé 5 méthodes de test pour tester les opérations CRUD d'un référentiel Spring Data JPA. Maintenant, nous pouvons exécuter toutes ces méthodes de test en même temps. Mais nous devons spécifier l'ordre d'exécution car JUnit n'exécute pas les méthodes de test dans l'ordre dans lequel elles apparaissent dans le code. Nous devons donc utiliser les annotations @TestMethodOrder et @Order comme suit : Avec cette mise à jour, nous pouvons maintenant exécuter toute la classe de test avec une base de données . Jusqu'à présent, vous avez appris à écrire des tests unitaires pour tester les opérations CRUD pour un référentiel avec Spring Data JPA et le framework Hibernate. Vous voyez que Spring et JUnit facilitent l'écriture des tests, et AssertJ rend l'assertion beaucoup plus lisible. J'espère que vous avez trouvé ce cous utile. FIN Merci pour votre attention, Jaouad assabbour Formateur Jaouad Assabbour

×