Tests et TestNG
Résultats des tests
Où trouve-t-on les résultats de TestNG?
Les résultats générés lors de l'éxécution des tests sont stockés dans un dossier test-output dans le workspace dans lequel vous avez exécuté le code Ils sont présents dans ce dossier sous forme de fichier html: index.html Cependant les plugin des IDE, peuvent nous permettre de voir directement les résultats.
Exemple d'exécution
Je vais présenter un exemple d'éxécution de tests ainsi que les
fichiers de résultats ainsi générés.
Pour ce faire je vais exécuter des tests sur un exemple basic de
code représentant une bibliothéque et la gestion de celle-ci:
Tout d'abord voici l'arborescence de mon projet:

Le premier package contient le code métier de l'application tandis que les deux suivants eux contiennent des classes de tests Enfin nous remarquons la présence du fichier testng.xml (notre campagne de tests). Pour cet exemple, je m'attacherai à tester les méthodes de la classe GestionBibliothéque.
Voici le code permettant de g&aecute;rer la bibliothéque. Pour les
besoins de la démonstration, nous ne voulons pas pouvoir insérer un
livre déjà présent dans la bibliothéque.
public class GestionBiblio {
public static boolean ajouterLivre(Livre livre, Bibliotheque biblio) {
// verification that book doesnt exist in bookshelves before insert it
if (biblio.getBiblio().contains(livre)) {
boolean b = biblio.getBiblio().add(livre);
System.out.println(b);
return b;
}
return false;
}
public static boolean chercherUnLivre(Livre livre, Bibliotheque biblio) {
return biblio.getBiblio().contains(livre);
}
public static void supprimerLivre(Livre livre, Bibliotheque biblio) {
biblio.getBiblio().remove(livre);
}
public static void listerBibliotheque(Bibliotheque biblio) {
ArrayList listeBiblio = biblio.getBiblio();
for (Livre l : listeBiblio) {
System.out.println(l);
}
}
}
Si vous observez ce code, plus particulièrement la méthode d'ajout, vous
verrez une erreur.
Maintenant voici le code des classes de tests:
- TestAjoutBibliotheque:
Dans cette première classe de tests, j'ai choisi de vous montrer comment utiliser l'annotation @DataProvide. Cette annotation permet de définir une méthode qui va servir de "fournisseur de données" à une ou plusieurs méthode(s) de tests. Dans l'exemple que je vous présente, le dataProvider va nous permettre de créer un liste de livres que j'utilise ensuite dans la méthode "testAjoutNonRedondant".
public class TestAjoutBibliotheque { @Test public void f() { } @Test public void testAjoutRedondant() { Auteur a = new Auteur("nom", "prenom"); Livre l1 = new Livre("titre1", a, new Date(1234)); Bibliotheque biblio = new Bibliotheque(); GestionBiblio.ajouterLivre(l1, biblio); Assert.assertEquals(false, GestionBiblio.ajouterLivre(l1, biblio)); } @DataProvider(name = "creerLivre") public Object[][] createLivre() { return new Object[][] { { "livre 1", new Livre("titre1", new Auteur("nom1", "prenom1"), null) }, { "livre 2", new Livre("titre2", new Auteur("nom2", "prenom2"), null) }, { "livre 3", new Livre("titre3", new Auteur("nom1", "prenom1"), null) } }; } @Test(dataProvider = "creerLivre") public void testAjoutNonRedondant(String n1, Livre l) { Bibliotheque biblio = new Bibliotheque(); System.out.println("ajout de: " + l); Assert.assertEquals(true, GestionBiblio.ajouterLivre(l, biblio)); } }
- TestBibliotheque:
Cette seconde classe de tests me permet de vous montrer que les tests écrits pour JUnit sont aussi applicables avec testNG. Ici les deux méthodes que nous avons testent le fonctionnement de la méthode qui recherche un livre dans une bibliothéque.
@Test public class TestBibliotheque { /** * Method test which verify if a present book is correctly found if present * in bookshelves */ public void testChercherUnlivreOk() { Bibliotheque biblio = new Bibliotheque(); Livre l = new Livre("titre", new Auteur("toto", "tata"), null); ArrayList
list = biblio.getBiblio(); list.add(l); Assert.assertEquals(true, GestionBiblio.chercherUnLivre(l, biblio)); } /** * method test which verify that a book which is not on the bookshelves is * not found */ public void testChercherUnlivreNok() { Bibliotheque biblio = new Bibliotheque(); Livre l = new Livre("titre", new Auteur("toto", "tata"), null); Livre l2 = new Livre("titre2", new Auteur("toto", "tata"), null); ArrayList list = biblio.getBiblio(); list.add(l); Assert.assertEquals(false, GestionBiblio.chercherUnLivre(l2, biblio)); } }
Maintenant que je vous ai présenté les deux classes de tests illustrant mon propos, voici ce qui se passe quand je lance les tests en faisant un "run" de notre fichier de campagne de tests (testng.xml):
[PackageUtils] Looking for test classes in the directory: C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\bin\univ\mlv\fr\xpose\tests\packages
[PackageUtils] Found class TestBibliotheque, seeing it if it's included or excluded
[PackageUtils] ... Including class TestBibliotheque
[TestRunner] Running the tests in 'testRecherche' with parallel mode:false
[RunInfo] Adding method selector: org.testng.internal.XmlMethodSelector@1d05c81 priority: 10
[TestClass] Creating TestClass for [ClassImpl univ.mlv.fr.xpose.tests.packages.TestBibliotheque]
[TestClass] Adding method TestBibliotheque.testChercherUnlivreOk()[pri:0, instance:null] on TestClass class univ.mlv.fr.xpose.tests.packages.TestBibliotheque
[TestClass] Adding method TestBibliotheque.testChercherUnlivreNok()[pri:0, instance:null] on TestClass class univ.mlv.fr.xpose.tests.packages.TestBibliotheque
[XmlMethodSelector] Including method univ.mlv.fr.xpose.tests.packages.testChercherUnlivreOk()
[XmlMethodSelector] Including method univ.mlv.fr.xpose.tests.packages.testChercherUnlivreNok()
[TestRunner] Running the tests in 'testAjout' with parallel mode:false
[RunInfo] Adding method selector: org.testng.internal.XmlMethodSelector@c53dce priority: 10
[TestClass] Creating TestClass for [ClassImpl univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque]
[TestClass] Adding method TestAjoutBibliotheque.f()[pri:0, instance:null] on TestClass class univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque
[TestClass] Adding method TestAjoutBibliotheque.testAjoutNonRedondant(java.lang.String, univ.mlv.fr.xpose.biblio.Livre)[pri:0, instance:null] on TestClass class univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque
[TestClass] Adding method TestAjoutBibliotheque.testAjoutRedondant()[pri:0, instance:null] on TestClass class univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque
[XmlMethodSelector] Including method univ.mlv.fr.xpose.tests.classes.f()
[XmlMethodSelector] Including method univ.mlv.fr.xpose.tests.classes.testAjoutNonRedondant()
[XmlMethodSelector] Including method univ.mlv.fr.xpose.tests.classes.testAjoutRedondant()
[TestNG] Running:
C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\testng.xml
[SuiteRunner] Created 2 TestRunners
[TestRunner] Running test testRecherche on 1 classes, included groups:[] excluded groups:[]
===== Test class
univ.mlv.fr.xpose.tests.packages.TestBibliotheque
@Test TestBibliotheque.testChercherUnlivreOk()[pri:0, instance:univ.mlv.fr.xpose.tests.packages.TestBibliotheque@cf40f5]
@Test TestBibliotheque.testChercherUnlivreNok()[pri:0, instance:univ.mlv.fr.xpose.tests.packages.TestBibliotheque@cf40f5]
======
[Invoker 10923757] Invoking univ.mlv.fr.xpose.tests.packages.TestBibliotheque.testChercherUnlivreNok
[Invoker 10923757] Invoking univ.mlv.fr.xpose.tests.packages.TestBibliotheque.testChercherUnlivreOk
===== Invoked methods
TestBibliotheque.testChercherUnlivreNok()[pri:0, instance:univ.mlv.fr.xpose.tests.packages.TestBibliotheque@cf40f5] 13582581
TestBibliotheque.testChercherUnlivreOk()[pri:0, instance:univ.mlv.fr.xpose.tests.packages.TestBibliotheque@cf40f5] 13582581
=====
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\testRecherche.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\testRecherche.xml
PASSED: testChercherUnlivreNok
PASSED: testChercherUnlivreOk
===============================================
testRecherche
Tests run: 2, Failures: 0, Skips: 0
===============================================
[TestRunner] Running test testAjout on 1 classes, included groups:[] excluded groups:[]
===== Test class
univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque
@Test TestAjoutBibliotheque.f()[pri:0, instance:univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque@15b9e68]
@Test TestAjoutBibliotheque.testAjoutNonRedondant(java.lang.String, univ.mlv.fr.xpose.biblio.Livre)[pri:0, instance:univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque@15b9e68]
@Test TestAjoutBibliotheque.testAjoutRedondant()[pri:0, instance:univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque@15b9e68]
======
[Invoker 10923757] Invoking univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque.f
[Invoker 10923757] Invoking univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque.testAjoutNonRedondant
ajout de: "titre1" de prenom1 nom1
[Invoker 10923757] Invoking univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque.testAjoutNonRedondant
ajout de: "titre2" de prenom2 nom2
[Invoker 10923757] Invoking univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque.testAjoutNonRedondant
ajout de: "titre3" de prenom1 nom1
[Invoker 10923757] Invoking univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque.testAjoutRedondant
===== Invoked methods
TestAjoutBibliotheque.f()[pri:0, instance:univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque@15b9e68] 22781544
TestAjoutBibliotheque.testAjoutNonRedondant(java.lang.String, univ.mlv.fr.xpose.biblio.Livre)[pri:0, instance:univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque@15b9e68]livre 1 "titre1" de prenom1 nom1 22781544
TestAjoutBibliotheque.testAjoutNonRedondant(java.lang.String, univ.mlv.fr.xpose.biblio.Livre)[pri:0, instance:univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque@15b9e68]livre 2 "titre2" de prenom2 nom2 22781544
TestAjoutBibliotheque.testAjoutNonRedondant(java.lang.String, univ.mlv.fr.xpose.biblio.Livre)[pri:0, instance:univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque@15b9e68]livre 3 "titre3" de prenom1 nom1 22781544
TestAjoutBibliotheque.testAjoutRedondant()[pri:0, instance:univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque@15b9e68] 22781544
=====
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\testAjout.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\testAjout.xml
PASSED: f
PASSED: testAjoutRedondant
FAILED: testAjoutNonRedondant("livre 1", "titre1" de prenom1 nom1)
java.lang.AssertionError: expected: but was:
at org.testng.Assert.fail(Assert.java:89)
at org.testng.Assert.failNotEquals(Assert.java:489)
at org.testng.Assert.assertEquals(Assert.java:118)
at org.testng.Assert.assertEquals(Assert.java:281)
at org.testng.Assert.assertEquals(Assert.java:291)
at univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque.testAjoutNonRedondant(TestAjoutBibliotheque.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:758)
at org.testng.TestRunner.run(TestRunner.java:613)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1142)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1067)
at org.testng.TestNG.run(TestNG.java:979)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:109)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:202)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:173)
FAILED: testAjoutNonRedondant("livre 2", "titre2" de prenom2 nom2)
java.lang.AssertionError: expected: but was:
at org.testng.Assert.fail(Assert.java:89)
at org.testng.Assert.failNotEquals(Assert.java:489)
at org.testng.Assert.assertEquals(Assert.java:118)
at org.testng.Assert.assertEquals(Assert.java:281)
at org.testng.Assert.assertEquals(Assert.java:291)
at univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque.testAjoutNonRedondant(TestAjoutBibliotheque.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:758)
at org.testng.TestRunner.run(TestRunner.java:613)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1142)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1067)
at org.testng.TestNG.run(TestNG.java:979)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:109)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:202)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:173)
FAILED: testAjoutNonRedondant("livre 3", "titre3" de prenom1 nom1)
java.lang.AssertionError: expected: but was:
at org.testng.Assert.fail(Assert.java:89)
at org.testng.Assert.failNotEquals(Assert.java:489)
at org.testng.Assert.assertEquals(Assert.java:118)
at org.testng.Assert.assertEquals(Assert.java:281)
at org.testng.Assert.assertEquals(Assert.java:291)
at univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque.testAjoutNonRedondant(TestAjoutBibliotheque.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:758)
at org.testng.TestRunner.run(TestRunner.java:613)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1142)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1067)
at org.testng.TestNG.run(TestNG.java:979)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:109)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:202)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:173)
===============================================
testAjout
Tests run: 5, Failures: 3, Skips: 0
===============================================
===============================================
testGestionBiblio
Total tests run: 7, Failures: 3, Skips: 0
===============================================
[TestNG] Time taken by org.testng.reporters.EmailableReporter@1a679b7: 15 ms
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\toc.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\testRecherche.properties
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\testAjout.properties
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\index.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\main.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\groups.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods-alphabetical.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods-alphabetical.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods-alphabetical.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods-alphabetical.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods-alphabetical.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods-alphabetical.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods-alphabetical.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods-alphabetical.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods-alphabetical.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\classes.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\reporter-output.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\methods-not-run.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\testng.xml.html
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\index.html
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@1e51060: 269 ms
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\junitreports\TEST-univ.mlv.fr.xpose.tests.classes.TestAjoutBibliotheque.xml
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\junitreports\TEST-univ.mlv.fr.xpose.tests.packages.TestBibliotheque.xml
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@337d0f: 8 ms
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testng-results.xml
[TestNG] Time taken by org.testng.reporters.XMLReporter@e102dc: 9 ms
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testng-failed.xml
Creating C:\Users\joelle\Documents\Ingenieurs2000\ECOLE\IR3\xposé\xpose_workspace\XposeIR3\test-output\testGestionBiblio\testng-failed.xml
[TestNG] Time taken by [TestListenerAdapter] Passed:0 Failed:0 Skipped:0]: 7 ms
Nous remarquons que tous les tests ne sont pas passés en succès. De plus nous voyons que à la fin de l'exécution des tests, les résultats sont aussi accessibles par le biais de fichier xml:
- TestBibliotheque.xml
- TestAjoutBibliotheque.xml
Nos tests nous montrent que nous avons une erreur dans la méthode qui
permet d'ajouter des livres. Effectivement nous faisons le contraire de
ce que nous avions défini, nous ajoutons un livre quand celui-ci existe
déjà dans la bibliothèque.
Nous corrigeons donc la méthode de la manière suivante:
public static boolean ajouterLivre(Livre livre, Bibliotheque biblio) {
// verification that book doesnt exist in bookshelves before insert it
if (!biblio.getBiblio().contains(livre)) {
boolean b = biblio.getBiblio().add(livre);
System.out.println(b);
return b;
}
return false;
}
Cette fois, nos tests passent.
Nous pouvons voir les résultats soit directement dans Eclipse:

Soit grâce au fichier index.html

Nous voyons dans cet exemple le nom des classes et méthodes de tests ainsi que leur statut.
Définition d'un type de fichier resultat personnel
TestNG offre la possibilité de spécifier un nouveau type de fichier de sortie. Pour ce faire, il existe deux classes à implémenter:
- org.testng.ITestListener
Nous implémentons ce listener si nous voulons que le fichier généré le soit en temps réel lors de l'éxécution des tests. Ce genre d'implémentation permet par exemple de faire un fichier de log qui se "remplit" au fur et à mesure. - org.testng.IReporter
Nous implémentons ce listener quand nous voulons par exemple générer un fichier (pdf par exemple) une fois que tous les tests se sont exécutés.