SlideShare a Scribd company logo
TestNG
Parce que vos tests le valent bien !
             Romain Linsolas
              @romaintaz




                                       1
Abstract


• TestNG, kézako ?
• Parlons fonctionnalités…


                             2
Romain Linsolas

•Développeur Java / Web depuis 2002
•Éleveur d'usines logicielles
•@ Société Générale
  @romaintaz
  http://linsolas.free.fr/wordpress


                                      3
1. Présentation



                  4
Test « New Generation »
   http://testng.org/

    https://github.com/cbeust/testng

• Créé par Cédric Beust (Google) en avril 2004
• Version 6.5.1
        1.0    2.0   4.0                         5.0                 6.0          6.5

 2004         2005   2006   2007   2008   2009         2010   2011         2012



                                                                                        5
Support IDE / builders
Natif              Par plugin




                                 6
2. Fonctionnalités

   Parce qu'il y en a plein dedans !




                                       7
@Test
               (non parce que c’est une librairie de tests quand même)

expectedExceptions                  Méthode ou classe
timeOut
                                    dependsOnMethods /
                                    dependsOnGroup

                                    expectedExceptionsMessageRegExp

                                    groups

                                    dataProvider

                                    invocationCount, singleThreaded
                                    threadPoolSize

                                    priority

                                                                         8
@Annotations

@BeforeMethod / @AfterMethod   @BeforeTest / @AfterTest

@BeforeClass / @AfterClass     @BeforeSuite / @AfterSuite

                               @BeforeGroups / @AfterGroups




                                                              9
Groupes de tests




                   10
@Test(groups = { "non-regression" })
public class MonTest {


   @Test(groups = { "slow",     "integration" })
   public void sloooooowTest() { ... }


   @Test(groups = { "fast" })
   public void fastTest() { ... }




                                                   11
Avec JUnit…
@Category(Integration.class) @Test
public void unTest { ... }


@RunWith(Categories.class)
@IncludeCategory(IntegrationTest.class)
@SuiteClasses({ Test1.class, Test2.class })
public class IntegrationTestSuite { }



                                              12
java org.testng.TestNG -groups non-regression



 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
      <groups>non-regression</groups>
    </configuration>
 </plugin>



                                                     13
Dépendances de tests




                       14
public class MonTest {
   @Test
   public void deployOnTomcat() { ... }


   @Test(dependsOnMethods = {"deployOnTomcat"})
   public void testWebUI() { ... }


   @Test(dependsOnGroups= {"integration.*"})
   public void someDependentTests() { ... }




                                                  15
public class MonTest {


   @Test
   public void firstTest() { ... }


   @Test(dependsOnMethods = {"firstTest"},
           alwaysRun = true)
   public void secondTest() { ... }




                                             16
Les Listeners




                17
@Test   @Listeners(MonListener.class)
public class maClasseDeTests { ... }




public class MonListener implements ITestListener {
  public void onTestFailure(ITestResult res) { ... }
  public void onFinish(ITestContext cxt) { ... }




                                                       18
IAnnotationTransformer
IAnnotationTransformer2
IHookable
IInvokedMethodListener
IMethodInterceptor
IReporter
ISuiteListener
ITestListener



                          19
Tests paramétrés




                   20
@Test   @Parameters({ "db" })
public void monTest(String db) { … }


<suite name="ma-suite">
 <parameter name="db" value="oracle"/>
 <test name="monTest"/>




                                         21
@DataProvider(name = "mon-provider")

public Object[][] getObjects() {

    return new Object[][] {

         { 1, 1 }, { 5, 120 }

    };

}

@Test(dataProvider = "mon-provider")

public void testFactorielle(int valeur, int resultat) {

    assertEquals(resultat, App.factorielle(valeur));

}




                                                          22
Les Factories




                23
public class TestNGFactory {

    private String foo;

    public TestNGFactory(String foo) { this.foo = foo; }

    @Factory public Object[] factory() {

        return new Object[] {

          new TestNGFactory("hello"),

          new TestNGFactory("Devoxx") };

    }

    @Test public void test() {

        System.out.println("==> " + foo);

    }

}

                                                           24
Et plein d'autres choses…

     Logger inclus           Rapports de résultats
                                 (xml, html)

 Support Guice                   Support du YAML

 Rerun failing tests first     Peut lancer du JUnit 3.x


                                                          25
26
Questions…




             27

More Related Content

PDF
Configurar con spring un api no basado en spring
Jose María Arranz
 
DOCX
codificacion de trabajos en neatbeens
Jhair Aguirre
 
PDF
Ejb 3.0 Glassfish 2.X Netbeans 6.X
a19987225
 
DOCX
Baocao ltjava
Tnt Ttđ
 
PPTX
Comparatif des frameworks js mv
Mael Monnier
 
PDF
Spring Batch ParisJUG
Julien Jakubowski
 
PDF
Devoxx France 2015 - Développement web en 2015
Romain Linsolas
 
PDF
Devoxx France 2015 - Se préparer à l'arrivée d'Angular 2
Romain Linsolas
 
Configurar con spring un api no basado en spring
Jose María Arranz
 
codificacion de trabajos en neatbeens
Jhair Aguirre
 
Ejb 3.0 Glassfish 2.X Netbeans 6.X
a19987225
 
Baocao ltjava
Tnt Ttđ
 
Comparatif des frameworks js mv
Mael Monnier
 
Spring Batch ParisJUG
Julien Jakubowski
 
Devoxx France 2015 - Développement web en 2015
Romain Linsolas
 
Devoxx France 2015 - Se préparer à l'arrivée d'Angular 2
Romain Linsolas
 

More from Romain Linsolas (7)

PDF
Devoxx 2014 - JavaScript tooling - Don't be naked in front of JavaScript
Romain Linsolas
 
PDF
Devoxx france 2014 - Création d'un web component avec Google Polymer
Romain Linsolas
 
PDF
Devoxx 2013 JavaScript Software Factory
Romain Linsolas
 
PPT
Softshake 2013 - Du JavaScript propre ? Challenge Accepted!
Romain Linsolas
 
PPT
JavaScript Devoxx France 2013
Romain Linsolas
 
PPTX
Devoxx 2012 hibernate envers
Romain Linsolas
 
PPT
Devoxx java script-1280-720
Romain Linsolas
 
Devoxx 2014 - JavaScript tooling - Don't be naked in front of JavaScript
Romain Linsolas
 
Devoxx france 2014 - Création d'un web component avec Google Polymer
Romain Linsolas
 
Devoxx 2013 JavaScript Software Factory
Romain Linsolas
 
Softshake 2013 - Du JavaScript propre ? Challenge Accepted!
Romain Linsolas
 
JavaScript Devoxx France 2013
Romain Linsolas
 
Devoxx 2012 hibernate envers
Romain Linsolas
 
Devoxx java script-1280-720
Romain Linsolas
 
Ad

Devoxx test ng

  • 1. TestNG Parce que vos tests le valent bien ! Romain Linsolas @romaintaz 1
  • 2. Abstract • TestNG, kézako ? • Parlons fonctionnalités… 2
  • 3. Romain Linsolas •Développeur Java / Web depuis 2002 •Éleveur d'usines logicielles •@ Société Générale @romaintaz http://linsolas.free.fr/wordpress 3
  • 5. Test « New Generation » http://testng.org/ https://github.com/cbeust/testng • Créé par Cédric Beust (Google) en avril 2004 • Version 6.5.1 1.0 2.0 4.0 5.0 6.0 6.5 2004 2005 2006 2007 2008 2009 2010 2011 2012 5
  • 6. Support IDE / builders Natif Par plugin 6
  • 7. 2. Fonctionnalités Parce qu'il y en a plein dedans ! 7
  • 8. @Test (non parce que c’est une librairie de tests quand même) expectedExceptions Méthode ou classe timeOut dependsOnMethods / dependsOnGroup expectedExceptionsMessageRegExp groups dataProvider invocationCount, singleThreaded threadPoolSize priority 8
  • 9. @Annotations @BeforeMethod / @AfterMethod @BeforeTest / @AfterTest @BeforeClass / @AfterClass @BeforeSuite / @AfterSuite @BeforeGroups / @AfterGroups 9
  • 11. @Test(groups = { "non-regression" }) public class MonTest { @Test(groups = { "slow", "integration" }) public void sloooooowTest() { ... } @Test(groups = { "fast" }) public void fastTest() { ... } 11
  • 12. Avec JUnit… @Category(Integration.class) @Test public void unTest { ... } @RunWith(Categories.class) @IncludeCategory(IntegrationTest.class) @SuiteClasses({ Test1.class, Test2.class }) public class IntegrationTestSuite { } 12
  • 13. java org.testng.TestNG -groups non-regression <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <groups>non-regression</groups> </configuration> </plugin> 13
  • 15. public class MonTest { @Test public void deployOnTomcat() { ... } @Test(dependsOnMethods = {"deployOnTomcat"}) public void testWebUI() { ... } @Test(dependsOnGroups= {"integration.*"}) public void someDependentTests() { ... } 15
  • 16. public class MonTest { @Test public void firstTest() { ... } @Test(dependsOnMethods = {"firstTest"}, alwaysRun = true) public void secondTest() { ... } 16
  • 18. @Test @Listeners(MonListener.class) public class maClasseDeTests { ... } public class MonListener implements ITestListener { public void onTestFailure(ITestResult res) { ... } public void onFinish(ITestContext cxt) { ... } 18
  • 21. @Test @Parameters({ "db" }) public void monTest(String db) { … } <suite name="ma-suite"> <parameter name="db" value="oracle"/> <test name="monTest"/> 21
  • 22. @DataProvider(name = "mon-provider") public Object[][] getObjects() { return new Object[][] { { 1, 1 }, { 5, 120 } }; } @Test(dataProvider = "mon-provider") public void testFactorielle(int valeur, int resultat) { assertEquals(resultat, App.factorielle(valeur)); } 22
  • 24. public class TestNGFactory { private String foo; public TestNGFactory(String foo) { this.foo = foo; } @Factory public Object[] factory() { return new Object[] { new TestNGFactory("hello"), new TestNGFactory("Devoxx") }; } @Test public void test() { System.out.println("==> " + foo); } } 24
  • 25. Et plein d'autres choses… Logger inclus Rapports de résultats (xml, html) Support Guice Support du YAML Rerun failing tests first Peut lancer du JUnit 3.x 25
  • 26. 26

Editor's Notes

  • #6: JUnit (créé en 1997) 4.0 est sorti en début 2006, introduction de @Test Junit est une déesse égyptienne :o) (Iounyt)
  • #19: JUnit : @Rule TestWatcher (TestWatchman deprecated)