TestNG, nouveau framework de tests unitaires Java

Lancement d'une classe de tests

Dans cette partie, nous allons pouvoir constater que l'organisation des tests est un des points forts du framework TestNG. En effet, les possibilités offertes sont très importantes. Par ailleurs nous verrons les techniques les plus utiles de lancement des tests, à savoir grâce au plugin Eclipse et grâce à une tâche Ant.

Création du fichier testng.xml

Le fichier testng.xml est le fichier de configuration du lancement des tests. Il permet de configurer les tests à lancer en fonction de leurs packages, classes, groupes ou encore par groupes de groupes! La DTD de ce fichier .xml permet vraiment énormément de configurations.

Un fichier de configuration s'articule autour de deux éléments que sont la suite qui représente l'ensemble des tests à lancer, et les test qui représentent chaques tests devant être lancés. Un test peut contenir plusieurs classes ou groupes de tests.
Chacun de ces éléments peuvent avoir un nom. La suite comporte un attribut permettant de spécifier le niveau de log à afficher.

Exemple de fichier :


<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
 
<suite name="Suite" verbose="5" >
 <test name="TestNum1" >
	...
 </test>
 <test name="TestNum2" >
	...
 </test>
 .
 .
 .
 <test name="TestNumN" >
	...
 </test>
</suite>

Schéma de la DTD du fichier testng.xml

La DTD du fichier testng.xml

Les organisations possibles des tests

Nous pouvons organiser nos lancement de tests selon plusieurs axes :

Au final, énormément de possibilités sont offertes; au programmeur de les utiliser à bon escient.

Création par le plugin Eclipse

Le plugin Eclipse permet de créer son fichier testng.xml grâce à une interface graphique offrant globalement les mêmes fonctionnalités.

Aperçu d'une configuration par le plugin

Configuration testng.xml par plugin Eclipse

Ainsi nous pouvons ajouter des classes ou des groupes ou encore se baser sur un fichier déjà créé.

Lancement des tests

TestNG permet que les tests soient lancés de plusieurs manières :

Nous allons maintenant voir comment lancer les tests grâce au plugin (pour son reporting) et grâce à une tâche Ant (pour l'automatisation des lancements).

Lancement grâce au plugin Eclipse

Le plugin Eclipse permet de lancer par une interface graphique les tests définis. C'est la même interface que celle utilisée pour définir la suite de test contenue dans le fichier testng.xml.
Une View Eclipse est disponible pour voir les résultats des tests. Elle permet aussi de relancer les tests préalablement échoués.

Lancement d'une suite de test :

Plugin Eclipse, lancement du test

Une fois le test exécuté, nous pouvons regarder les résultats dans la vue TestNG.
Nous pouvons voir beaucoup d'informations et effectuer quelques actions :

Voici la vue de reporting générale :

La vue Eclipse de reporting avec tests Ok

Et la vue de reporting d'un test échoué :

La vue Eclipse de reporting avec tests échoués

Lancement grâce à une tâche Ant

Nous venons de voir comment utiliser le plugin Eclipse. Mais ce n'est pas quelque chose d'automatique et encore moins portable. En effet l'installation du plugin est nécessaire pour bénéficier de ces fonctionnalités. Nous allons voir une méthode plus propre et plus adaptée au déploiement et à des clients des applications.
Je veux bien entendu parler d'une tâche Ant.

La tâche Ant permet d'effectuer plus de choses à l'exécution des tests. En effet, nous pouvons configurer les rapports de tests afin d'avoir des rapports au format HTML notamment.
Cela est très utile pour avoir des traces de nos tests, et ces rapports sont très appréciés dans le cadre d'un projet.

Nous allons donc voir les éléments de base de la tâche Ant. La partie concernant les rapports sera traitée par la suite.

Voici les éléments concernant la configuration de TestNG, comme l'inclusion de la librairie pour Ant :


<!-- Création d'un projet Ant -->
<project name="testng" default="base">

   <!-- Spécification de propriétés utilisées par la suite -->
   <property name="bin.dir" value="bin/"/>
   <property name="lib.dir" value="lib/"/>
   <property name="src.dir" value="src/"/>
   <property name="src.dir.app" value="src/"/>

   <!-- Définition d'un path -->
   <path id="class.path">
      <fileset dir="${lib.dir}">
	 <!-- Ajout des jar de TestNG au path pour la suite de l'exécution -->
         <include name="*.jar" />
      </fileset>
      <path location="${bin.dir}"/>>
   </path>
   
   ...
   
</project>

Vient ensuite la partie concernant la définition des tâches Ant concernant les exécutions TestNG à proprement parlé :


   <!-- Création d'une tâche Ant -->
   <target name="base">
   
      <!-- Déclaration que c'est une tâche pour TestNG -->
      <taskdef name="testng" classname="org.testng.TestNGAntTask" classpathref="class.path"/>
	  
      <!-- Utilisation du path défini précédemment -->
      <!-- On continue l'exécution malgré un test échoué -->
      <testng classpathref="class.path" haltOnfailure="false">
	  
         <!-- Spécification de la localisation du fichier testng.xml à exécuter -->
         <xmlfileset dir="${src.dir.app}/base" includes="testng.xml"/>
		 
        <!-- Spécification d'un argument à la JVM : activation des annotations -->
      	<jvmarg value="-ea"/>
      </testng>
   </target>

Nous avons vu comment écrire une tâche pour l'outil commun Ant. L'exécution se fait comme n'importe quelle tâche Ant.

Nous pouvons désormais passer aux différents exemples des fonctionnalités de TestNG décrites plus haut.
Nous voyons ici la vue Eclipse permettant le lancement des différents exemples.

Vue Eclipse Ant