Mikaël Marche
Junit est une API Java permettant de décrire des tests unitaires d'une application. Le plugin Junit présent dans Salomé-TMF permet d'exécuter automatiquement des tests stéréotypés « TestCase » de Junit.
Il existe deux modes de création de suite de tests Junit, un mode dit « natif » et un autre lié au plugin BeanShell. Le mode natif utilise la réflexion Java pour instancier les tests, alors que le mode BeanShell produit des scripts de tests BeanShell qui décrivent l'instanciation et l'exécution de la classes de tests.
Dans le mode natif le fichier « .jar ou .zip » doit contenir en plus de l'objet de test stéréotypé « TestCase », l'ensemble des classes nécessaires à l'exécution des tests. Cette restriction est due au principe d'exécution du mode natif qui ne peut être lié à un script d'environnement ou d'exécution pour charger d'autres classes.
Pour créer une suite de tests Junit, après avoir sélectionné une suite de tests dans le projet, actionner dans le menu « Outils->Plugin junit » la fonctionnalité « Créer une suite de tests Junit ».
Remplissez ensuite le formulaire de création de classes comme suivant :
A partir de ces informations le plugin Junit analyse la classe de test sélectionnée pour produire l'ensemble des tests contenus sous forme de tests automatique dans Salomé (BeanShell ou natif, suivant le mode sélectionné).
Nom | Classe | Description |
date | Java.lang.Date | Date de l'exécution |
time | Java.lang.Time | Heure de l'exécution |
salome_projectName | Java.lang.String | Nom du projet courant |
salome_projectObject | *.Project | Référence de l'objet projet de Salomé |
salome_debug | boolean | Faut lors de l'évaluation du script dans l'éditeur |
salome_ExecResultObject | *.ExecutionResult | Référence sus les résultats d'exécution courant |
salome_ExecTestResultObject | *.ExecutionTestResult | Référence sur le résultat d'exécution du test courant |
salome_CampagneName | Java.lang.String | Nom de la campagne courante |
salome_CampagneObject | *.Campaign | Référence de la campagne courante |
salome_environmentName | Java.lang.String | Nom de l'environnement courant |
salome_environmentObject | *.Environment | Référence sur l'environnement courant |
salome_ExecName | Java.lang.String | Nom de l'éxécution courante |
salome_ExecObject | *.Execution | Référence sur l'exécution courante |
salome_TestName | Java.lang.String | Nom du test courant |
salome_TestObject | *.Test | Référence sur le test courant |
salome_SuiteTestName | Java.lang.String | Nom de la suite de tests courante |
salome_SuiteTestObject | *.TestList | Référence sur la suite de tests courante |
salome_FamilyName | Java.lang.String | Nom de la famille courante |
salome_FamilyObject | *.Family | Référence sur la famille courante |
testLog | Java.lang.String | Log de tests à ajouter comme attachement à l'éxécution |
En mode Junit natif, si la classe de tests possède un constructeur qui prend comme argument une Hashtable, la classe de tests est instanciée avec ce constructeur et un objet Hashtable qui contient les paramètres de tests valués ainsi que les objets précédents.
import junit.framework.TestCase; import org.objectweb.salome_tmf.data.Environment; import java.util.Hashtable; public class TestParam extends TestCase{ String url_serveur_Env; String Adresse_services_schema_Env; String url_serveur_DS; String Adresse_services_schema_DS; public TestParam(String name) { System.out.println("Constructor with String used, arg=" + name); } public TestParam(Hashtable params) { System.out.println("Constructor with Hashtable used, arg=" + params); /*sample to salome_tmf object in Java Environment env = (Environment)params.get("salome_environmentObject"); /* sample to use environment parameters */ url_serveur_Env = env.getParameterValue("url_serveur"); Adresse_services_schema_Env = env.getParameterValue("Adresse_services_schema"); /* sample to use dataset parameters */ url_serveur_DS = (String) params.get("url_serveur"); Adresse_services_schema_DS = (String) params.get("Adresse_services_schema"); } public void testParam() throws Exception { System.out.println("(env) url_serveur = " + url_serveur_Env); System.out.println("(env) Adresse_services_schema = " + Adresse_services_schema_Env); System.out.println("(DataSet) url_serveur = " + url_serveur_DS); System.out.println("(DataSet) Adresse_services_schema = " + Adresse_services_schema_DS); } }En mode BeanShell, l'affectation de la Hashtable se fait à partir d'un appel de méthode « setParam(Hashtable) » si celle-ci existe dans la classe de tests.
import junit.framework.TestCase; import org.objectweb.salome_tmf.data.Environment; import java.util.Hashtable; public class TestParam extends TestCase{ String url_serveur_Env; String Adresse_services_schema_Env; String url_serveur_DS; String Adresse_services_schema_DS; public void setParam(Hashtable params) { /*sample to salome_tmf object in Java Environment env = (Environment)params.get("salome_environmentObject"); /* sample to use environment parameters */ url_serveur_Env = env.getParameterValue("url_serveur"); Adresse_services_schema_Env = env.getParameterValue("Adresse_services_schema"); /* sample to use dataset parameters */ url_serveur_DS = (String) params.get("url_serveur"); Adresse_services_schema_DS = (String) params.get("Adresse_services_schema"); } public void testParam() throws Exception { System.out.println("(env) url_serveur = " + url_serveur_Env); System.out.println("(env) Adresse_services_schema = " + Adresse_services_schema_Env); System.out.println("(DataSet) url_serveur = " + url_serveur_DS); System.out.println("(DataSet) Adresse_services_schema = " + Adresse_services_schema_DS); } }
Note : L'exemple utilise les scripts d'environnement pour charger les classes de l'objet sous test, il est possible de ne pas utiliser les scripts d'environnement, si le fichier « .jar » contenant les tests contient aussi les classes de l'objet sous tests.
L'ensemble des tests trouvés dans cette classe est :
On suppose que l'on a crée un environnement « JavaMoney », et on va ajouter à cet environnement un script BeanShell qui chargera les classes du fichier « SUTMoney.jar ». Pour cela, le script d'environnement est le suivant :
addJar("file:/home/marchemi/pub/junit3.8.1/SUTMoney.jar");
On note que le script d'environnement peut charger plusieurs fichiers « .jar », et au besoin faire des traitements en BeanShell.
On note qu'il est aussi possible de modifier le fichier plugin.xml du répertoire simpleJunit pour charger un ensemble de librairies Java.
<?xml version="1.0" ?> <!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 0.2" "http://jpf.sourceforge.net/plugin_0_2.dtd"> <plugin id="simpleJunit" version="1" class="salomeTMF_plug.simpleJunit.SimpleJunitPlugin"> <requires> <import plugin-id="core"/> </requires> <runtime> <library id="simpleJunit" path="simpleJunit/simpleJunit.jar" type="code"/> <library id="junit" path="simpleJunit/libs/HTTPUnits/junit.jar" type="code"/> <library id="httpjunit" path="simpleJunit/libs/HTTPUnits/httpunit.jar" type="code"/> <library id="xsdlib" path="simpleJunit/libs/libeXist/xsdlib.jar" type="code"/> </runtime> <extension plugin-id="core" point-id="TestDriver" id="simpleJunit.TestDriver"> <parameter id="class" value="salomeTMF_plug.simpleJunit.SimpleJunitPlugin"/> <parameter id="name" value="Junit"/> <parameter id="description" value="Plugin Junit pour la definition de classe de tests"/> <parameter id="extensions" value=".junit"/> </extension> <extension plugin-id="core" point-id="Common" id="simpleJunit.Common"> <parameter id="class" value="salomeTMF_plug.simpleJunit.SimpleJunitPlugin"/> <parameter id="name" value="JunitTestSuite"/> <parameter id="description" value="Creation de suite HTTPJunit TVMoblie"/> </extension> </plugin>
This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.71)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -split 1 -no_navigation -dir ../.././src_simpleJunit/plugins/simpleJunit/docs/html/fr -no_footnode fr/simpleJunit.tex
The translation was initiated by on 2006-03-06