L'objet de cet article est de vous montrer un premier aperçu de codjo-release-test[1] en écrivant un test d'intégration pour une petite application Swing.
1 - Présentation de l'application
L'écran initial devra ressembler à cela :
Après un premier appui sur le bouton, vous devrez obtenir l'écran suivant :
2 - Développement de l'application[2]
2.1 - Préparation de la structure du projet
L'application est un projet maven composé des modules swing-application-gui et swing-application-release-test.
Pour utiliser codjo, vous devez ajouter les dépôts maven suivants dans le pom parent du projet :
<repositories> <repository> <id>codjo</id> <url>http://repo.codjo.net/maven2/inhouse</url> </repository> <repository> <id>codjo-external</id> <url>http://repo.codjo.net/maven2/external</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>codjo-plugin</id> <url>http://repo.codjo.net/maven2/inhouse</url> </pluginRepository> <pluginRepository> <id>codjo-external-plugin</id> <url>http://repo.codjo.net/maven2/external</url> </pluginRepository> </pluginRepositories>
2.1.1 - Module swing-application-gui
Ce module contiendra le code de l'application. Il peut être écrit comme n'importe quel autre projet maven.
2.1.2 - Module swing-application-release-test
Ce module contiendra le test d'intégration et devra remplir certaines contraintes afin de fonctionner avec codjo-release-test.
Voici la procédure à suivre pour le créer :
2.1.2a - Ajout des dépendances
Ajoutez une dépendance sur le module de l'application, ainsi que sur la librairie codjo-release-test :
<dependencies> <dependency> <groupId>net.codjo.release-test</groupId> <artifactId>codjo-release-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>codjo-examples</groupId> <artifactId>swing-application-gui</artifactId> <version>1.0</version> </dependency> </dependencies>
2.1.2b - Ajout des plugins maven
Ajoutez les plugins maven-config-plugin et maven-test-release-plugin :
<build> <plugins> <plugin> <groupId>net.codjo.maven.mojo</groupId> <artifactId>maven-config-plugin</artifactId> </plugin> <plugin> <groupId>net.codjo.maven.mojo</groupId> <artifactId>maven-test-release-plugin</artifactId> </plugin> </plugins> </build>
2.1.2c - Configuration de codjo-release-test
Le fichier test-release.cfg contient les informations permettant de lancer et configurer l'application à tester.
La classe principale (main) de l'application étant fr.duminy.examples.codjo.releasetest.swing.SwingApplication, vous devez créer un fichier src/config/test-release.cfg contenant le texte suivant : gui.default.class=fr.duminy.examples.codjo.releasetest.swing.SwingApplication
2.1.2d - Création du répertoire contenant le test d'intégration
Créez le répertoire src/main/usecase. Le contenu de celui-ci peut être librement organisé :
- Tout fichier dont l'extension est xml et dont le tag racine est release-test sera considéré comme un test d'intégration.
- Les tests peuvent être organisés en sous-répertoires.
2.2 - Ecriture du test d'intégration
Dans une approche TDD (développement piloté par les tests), vous allez tout d'abord écrire le test.
Créez le fichier MainFrame.xml dans le répertoire src/main/usecase du module swing-application-release-test. Tout fichier de test d'intégration contient au minimum un texte qui ressemble à cela :
<?xml version="1.0" encoding="ISO-8859-1"?> <release-test name="MainFrame" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://test-release.xsd" enabled="true"> <description>Test the main screen</description> <gui-test> </gui-test> </release-test>
En l'état actuel, le test ne fait que lancer l'application. Les actions et les vérifications doivent être ajoutées à l'intérieur de la balise gui-test.
Vérifiez tout d'abord que l'écran initial s'affiche bien avec le titre "Swing application" :<assertFrame matching="equals" title="Swing application"/>
La table s'appellera "colorTable". Vérifiez son état de cette manière :
<assertTable name="colorTable" expected="red" row="0" column="English" background="255,0,0"/> <assertTable name="colorTable" expected="rouge" row="0" column="Français" background="255,0,0"/>
Vérifiez que le bouton (nommé "changeColorButton") est bien activé :<assertEnabled expected="true" name="changeColorButton"/>
Cliquez sur le bouton avec le code <click name="changeColorButton"/>
Pour terminer le test, vous allez vérifier l'état attendu après un clic sur le bouton :
<assertTable name="colorTable" expected="green" row="0" column="0" background="0,255,0"/> <assertTable name="colorTable" expected="vert" row="0" column="1" background="0,255,0"/>
2.3 - Ecriture de l'application
Comme vous l'avez vu précédemment, la table et le bouton sont nommés respectivement "colorTable" et "changeColorButton". Cela se traduit par le code java suivant :
JTable table = new JTable(model); table.setName("colorTable"); JButton button = new JButton("Change color"); button.setName("changeColorButton");
Le reste du code java sortant du périmètre de cet article, vous pouvez écrire celui-ci à votre convenance.
3 - Lancement du test d'intégration
Ouvrez une ligne de commande et assurez vous d’utiliser java 5 ou java 6 [3] en tapant dans une ligne de commande : java -version
Ensuite, allez dans le répertoire du pom parent du projet et tapez la commande suivante :
mvn -Dprocess=integration clean install
Le résultat du test d'intégration est affiché de la manière suivante :
[INFO] Execution des test contenus dans /home/fabien/projets/codjo-examples/codjo-release-test/swing-application/release-test/src/main/usecase [ReleaseTestRunner] Execution des test contenus dans /home/fabien/projets/codjo-examples/codjo-release-test/swing-application/release-test/src/main/usecase [ReleaseTestRunner] 1 tests release trouvés ! [ReleaseTestRunner] . [ReleaseTestRunner] --------------------------------------------------------------- [ReleaseTestRunner] Lancement du test release : /home/fabien/projets/codjo-examples/codjo-release-test/swing-application/release-test/src/main/usecase/MainFrame.xml [ReleaseTestRunner] Repertoire des donnees du test : /home/fabien/projets/codjo-examples/codjo-release-test/swing-application/release-test/src/main/usecase [ReleaseTestRunner] Repertoire de lancement : . [ReleaseTestRunner] test: [ReleaseTestRunner] [release-test] Exécution test MainFrame [ReleaseTestRunner] [release-test] en mode LOCAL_SUFFIX [ReleaseTestRunner] Time: 1,577 [ReleaseTestRunner] OK (1 test)
Vous pouvez constater que codjo-release-test a trouvé le test d'intégration et que celui-ci est passé. Bravo !
4 - Conclusion
Cet article vous a présenté un aperçu rapide de codjo-release-test.
Les prochains articles vous montreront des fonctionnalités plus avancées.
Notes
[1] Le framework codjo, développé en interne chez mon client pendant une quinzaine d'années, est un logiciel libre (sous licence apache) depuis fin 2011.
[2] Le code source complet de cet article est disponible sur GitHub.
[3] Au moment de la rédaction de cet article, codjo n'a pas été testé sur java 7 ou java 8. En testant l'exemple de cet article, j'ai effectivement constaté que codjo-release-test ne fonctionne pas avec ces versions.