[Java] Tester ses POJOs avec SmartUnit

Tester ses POJOs est une tâche que l'on met généralement de côté car elle est fastidieuse et présente généralement une faible valeur ajoutée.

Néanmoins, elle n'est pas dénuée d'intérêt. Nous ne sommes, en effet, jamais à l'abri d'introduire des régressions dans notre code, aussi simple soit-il.

La librairie SmartUnit permet de tester ses POJOs en un clin d'oeil ...

Installation

Tout d'abord, ajoutez cette dépendance au fichier pom.xml de votre projet :

<dependency>
  <groupId>org.agileware</groupId>
  <artifactId>smartunit</artifactId>
  <version>0.10.2</version>
  <scope>test</scope>
</dependency>
Dépendance à ajouter

Utilisation

Soit la classe Personne à tester. Le code suivant permet de tester tous ses attributs :

@Test
public void testProperties() throws Exception {
  PropertiesTester tester = new PropertiesTester();
  tester.testAll(Personne.class);
}
Test de la classe Personne

En seulement 2 lignes (voire même une seule), nous testons que chaque getter de la classe Personne retourne bien la valeur attribuée par le setter correspondant. Peu importe que la classe Personne contienne 2, 3 ou 50 attributs, ces quelques lignes suffiront à tester tous ses accesseurs. Et si la liste des attributs de cette classe vient à évoluer au fil du projet, il ne sera pas nécessaire de modifier les tests de cette classe pour éviter les erreurs de compilation (en cas de retrait d'attribut) ou le manque de couverture de code (en cas d'ajout d'attributs).

Cas des classes qui n'ont pas de constructeur sans argument

Il est nécessaire que les types des attributs de votre POJO aient un constructeur public et sans argument. Dans le cas contraire, le test du POJO échouerait car SmartUnit ne parviendrait pas à instancier ces attributs. Pour pallier à ce problème, il faut indiquer à SmartUnit une méthode qui permet d'instancier ces objets.

Par exemple, si la classe Personne contient une date de naissance de type LocalDate, comme cette classe n'a pas de constructeur, il faut indiquer comment l'instancier (par exemple avec la méthode now()). Notre méthode de test devient alors :

@Test
public void testProperties() throws Exception {
  PropertiesTester tester = new PropertiesTester();
  tester.addMapping(LocalDate.class, LocalDate.now());
  tester.testAll(Personne.class);
}
Test de la classe Personne

 

Sources

Site de SmartUnit

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.