TestNG, nouveau framework de tests unitaires Java

Le framework TestNG

Le framework, que j'ai choisi de présenter, est jeune et a été développé afin de palier aux manques du framework très connu JUnit (en sa version 3.8).

A l'heure du comparatif des différents frameworks (octobre 2005), JUnit était encore en version 3.8. Lors de la rédaction du site web (mars 2006), la version 4.0 de JUnit a fait son apparition et offre plus de flexibilité et fonctionnalités à JUnit.
C'est pourquoi je ferai un point particulier pour parler de JUnit 4.0 comparé à TestNG. Ce point sera moins exhaustif car non testé et uniquement basé sur les informations du site officiel de JUnit.

Présentation du framework

TestNG est un framework de tests unitaires Java d'une nouvelle génération. En effet il offre la possibilité aux développeurs d'utiliser une des améliorations importantes de Java 1.5, à savoir les annotations.

C'est par ailleurs un framework très simple à mettre en oeuvre et à intégrer dans des projets. En effet, TestNG assure une rétro-compatibilité avec les tests JUnit. Il propose par ailleurs un plugin permettant de l'interfacer dans le l'environnement de développement Eclipse.

Ce framework a retenu mon attention durant un comparatif pour d'autres fonctionnalités évoluées qui en font un utilitaire de tests très puissant. Il offre une flexibilité d'écriture, une organisation très ouverte des tests et des fonctionnalités très avancées comme la généralisation des tests. C'est ainsi que ce framework a été retenu comme framework de tests unitaires pour le projet de Génie Logiciel de 3ième année.

Fonctionnalités

Afin de clarifier mes propos, voici un rapide aperçu des différentes fonctionnalités offertes par TestNG :

Comparaison avec JUnit 3.8

Pour vous montrer l'intérêt de TestNG, il semble utile de le comparer avec la référence en matière de tests unitaires Java, à savoir JUnit. Nous allons expliquer les différences entre les deux frameworks et nous verrons les intérêts des fonctionnalités citées ci-dessus.

Voici le tableau comparatif des deux frameworks :

Points de comparaison JUnit 3.8 TestNG 4.4
Intégration à Eclipse Totale Totale
Java 1.4 Oui Oui
Java 1.5 Non Oui
Flexibilité Faible Très bonne
Facilité de mise en oeuvre Très bonne Très bonne
Organisation des tests Moyenne Très bonne
Reporting Très bon Très bon
Gestion des Exceptions Aucune Oui
Passage de paramètres Aucun Oui
Généralisation des tests Aucune Oui
Compatibilité JUnit Oui Oui

Nous allons maintenant pouvoir expliquer les différents points évoqués dans le comparatif et voir les avantages de TestNG

Un point sur JUnit 4.0

A l'heure de l'écriture du site web, JUnit 4.0 est sorti en version officielle. Cette nouvelle version se voulait utilisatrice des fonctionnalités de Java 1.5.
Au final qu'en est-il ? TestNG s'est-il fait rattraper par JUnit ? Est-il devenu obsolète à peine arrivé à maturité ?
Ce sont les questions auxquelles je vais essayer de répondre.

Les nouveautés de JUnit 4.0

Le framework JUnit en sa mouture 4.0 propose en effet la gestion de Java 1.5 avec l'utilisation des annotations comme TestNG. De ce fait, JUnit n'impose désormais plus de norme de nommage des méthodes de tests, des méthodes de configuration telles que la méthode setUp() ou encore de l'obligation d'étendre de la classe TestCase.

Les annotations disponibles dans JUnit 4.0 sont :

JUnit 4.0 ou TestNG

Au final nous voyons que JUnit 4.0 apporte peu d'évolution par rapport à JUnit 3.8. Les seules avancées sont l'utilisation des annotations, l'arrivée de la gestion des Exception java et la possibilité d'ignorer un test.

JUnit 4.0 apporte donc beaucoup moins d'innovations qu'attendu par la communauté. Les annotations apportent la flexibilité qui manquait à l'écriture des tests.
On peut donc affirmer que TestNG reste un framework innovant et très avancé au niveau des fonctionnalités. La gestion des paramètres et la généralisation des tests par l'utilisation du pattern Factory restent des exclusivités. Cela est de bonne augure pour l'avenir du framework qui garde une longueur d'avance sur JUnit. De même le système d'organisation des tests JUnit n'a pas évolué et TestNG reste en avance grâce à l'utilisation complexe de groupes de tests...

On peut en conclure que le choix de TestNG dans un projet reste tout à fait valable dès lors que nous allons utiliser les fonctionnalités exclusives et avancées de TestNG. Pour les autres cas d'utilisation, le choix se fera selon les préférences du programmeur.

Tableau récapitulatif

Points de comparaison JUnit 4.0 TestNG 4.4
Intégration à Eclipse Totale Totale
Java 1.4 Oui Oui
Java 1.5 Oui Oui
Flexibilité Très bonne Très bonne
Facilité de mise en oeuvre Très bonne Très bonne
Organisation des tests Moyenne Très bonne
Reporting Très bon Très bon
Gestion des Exceptions Oui Oui
Passage de paramètres Aucun Oui
Généralisation des tests Aucune Oui
Compatibilité JUnit Oui Oui