SlideShare une entreprise Scribd logo
1  sur  26
Unit Testy
Obsah



 I    Úvod


II    JUnit Framework


III   Best Practices


IV    Další nástroje pro podporu unit testování


V     Otázky a odpovědi

                                                  2
Úvod



 Co je unit testování?

 Co je a co není Unit test

 Přínosy unit testování

 Mýty o unit testování

 Programování řízené testy – Test Driven Development (TDD)




                                                              3
Úvod
            Co je unit testování?


 „In computer programming, unit testing is a method by which
  individual units of source code are tested to determine if they
  are fit for use “
   -- wikipedia


 Činnost úzce spjatá s vývojem aplikačních programů

 Proces psaní testů pro všechny metody nebo funkce modulu




                                                                    4
Úvod
            Co je a co není Unit Test


 Unit test je automaticky a samostatně testovatelná
  část použitelná k potvrzení, že modul (jednotka) zdrojového
  kódu pracuje správně
   Modulem (jednotkou) je testovatelná část aplikačního programu
    (metoda, funkce, procedura, program atd.)

 Isolovaný
 Opakovatelný

 Rychlý
 Samopopisný

                                                                    5
Úvod
             Co je a co není Unit Test


 Test není Unit Testem pokud:
   Komunikuje s databází
   Komunikuje napříč síťovým prostředím
   Spolupracuje se souborovým systémem
   Nemůže běžet společně s ostatními unit testy
   Musíte provést speciální akce ve vašem prostředí (konfigurace) pro
    jeho běh
   Nelze otestovat v izolaci od ostatních tříd

 Vadí nám že Test není úplným Unit Testem?
   Kdy, kde a kdo bude unit testy spouštět?



                                                                         6
Úvod
           Přínosy unit testování


 Podporuje izolování částí programu a snadné ověření správné
  funkčnosti

 Zjednodušuje integrační testování

 Poskytuje dokumentaci

 Zlepšuje kvalitu kódu

 Umožňuje bezpečněji provádět refaktoring

 Obnovuje sebedůvěru



                                                                7
Úvod
           Mýty o unit testování


 Nepíšu unit testy protože:

    Já chyby nedělám.

    Funkcionalita je triviální.

    Mě to zdržuje.

    Nevím jak testovat.




                                   8
Úvod
             Test Driven Development

                                                      Design

 Programovací technika
                                             Test               Test

 Test-first přístup
                                                    Implement
 Test – Code – Refactor

 Účel vytváření testu není kontrola zda kód souhlasí se
  specifikací, ale testy představují nástroj pro návrh systému.

 Vedlejší efekt zaručuje, že veškerý kód je pokryt testy.

              Test


  Refactor             Code


                                                                       9
JUnit Framework



 Framework pro unit testování v jazyce Java
   3.x
   4.x - Anotation based

 Jednoduchý

 Volně dostupný

 IDE support, Maven support




                                               10
JUnit Framework
                  Unit test Class


 Standardní Java class

 Testovací metoda označena anotací @Test

public class SimpleTest {

    @Test

    public void testEmptyCollection() {

            Collection<String> collection = new ArrayList<String>();

            assertTrue(collection.isEmpty());

    }

}




                                                                       11
JUnit Framework
                  Unit test Lifecycle


 Anotace @Before @After @BeforeClass @AfterClass
public class LifecycleTest {

    private Collection<String> collection;

    @BeforeClass

    public static void oneTimeSetUp() {}

    @AfterClass

    public static void oneTimeTearDown() {}

    @Before

    public void setUp() {

         collection = new ArrayList<String>();

    }

    @After

    public void tearDown() {

         collection.clear();

    }
                                                    12
…
JUnit Framework
               Time Test


 Pokud test běží déle než definovanou dobu, je ukončen a
  končí neúspěšně

 Anotace @Test(timeout = 1000)

public class ExpectedExceptionTest {

    @Test(expected = ArithmeticException.class)

    public void divisionWithException() {

         int i = 1 / 0;

         System.out.println(i);

    }

}




                                                            13
JUnit Framework
               Expected Exception


 Testování předpokládaného vyhození výjimky

 Anotace @Test(expected = ArithmeticException.class)

public class ExpectedExceptionTest {

    @Test(expected = ArithmeticException.class)

    public void divisionWithException() {

         int i = 1 / 0;

         System.out.println(i);

    }

}




                                                        14
JUnit Framework
                  Anotace @Ignore


 Dočasné vyřazení testu

 Anotace @Ignore
     Při použití na úrovni třídy vyřazujeme všechny testy
     JUnit při spouštění reportuje ignorované testy
     Při použití můžeme definovat důvod vyřazení

public class IgnoreTest {

    @Ignore("Temporary ignore during refactoring")

    @Test

    public void testEmptyCollection() {

            System.out.println("Method is not ready yet");

    }

}

                                                             15
JUnit Framework
               Suite Test


 Seskupování testů

 Anotace @Suite

@RunWith(Suite.class)

@Suite.SuiteClasses({

        SimpleTest.class,

        LifecycleTest.class

})

public class SuiteTest {

}




                                 16
Unit Testing Best Practices



 Dodržujte konvence při vytváření unit testu

 Používejte Assertions při tvorbě testu
    Informativní zprávy http://joe.truemesh.com/blog/000511.html

 Vytvářejte rychlé unit testy

 Spouštějte unit testy automaticky
    Maven, Jenkins http://jenkins-ci.org/

 Oddělujte unit testy pro jednotlivé business moduly

 Oddělujte unit testy podle jejich typu
    Spouštěné uživatelem, spouštěné při vývoji, integrační atd.
                                                                    17
Unit Testing Best Practices
           Konvence


 Jméno třídy by mělo končit sufixem „Test“

 Jméno metody by mělo začínat prefixem „test“

 Návratová hodnota musí být „void“

 Metoda nesmí vyhazovat výjimku




                                                 18
Další nástroje pro podporu unit testování



 TestNG

 Podpora unit testování v Maven

 Mocking

 EasyMock knihovna

 …




                                                        19
Další nástroje pro podporu unit testování
             TestNG


 Unit test framework

 TestNG versus JUnit
   Suite Test using XML
   Expected Exception Message ReqExp
   Parameterized Tests
   Dependency Test
   Invocation Count Test
   @BeforeSuite, @AfterSuite, @BeforeTest, @AfterTest
   Groups

 IDE support, Maven support

                                                         20
Další nástroje pro podporu unit testování
              Podpora unit testování v Maven


 Maven Surefire plugin
   http://maven.apache.org/plugins/maven-surefire-plugin/
   Spouští unit testy během test lifecycle phase
       Wildcard default patterns:
            **/Test*.java

            **/*Test.java

            **/*TestCase.java

   JUnit, TestNG and POJO Test support
   Reports
       TXT and XML
       HTML reports - Maven Surefire Report Plugin
            http://maven.apache.org/plugins/maven-surefire-report-plugin/

                                                                             21
Další nástroje pro podporu unit testování
            Mocking


 Mock Object je simulovaný objekt, který napodobuje chování
  reálného objektu řízeným způsobem.

 “You build something that works as something else”

 Frameworks
       EasyMock http://easymock.org/
       PowerMock http://code.google.com/p/powermock/
       Mockito, jMockit etc.




                                                               22
Další nástroje pro podporu unit testování
                EasyMock knihovna


 EasyMock http://easymock.org/

 Process
     Create Mock, Record Expectations
     Replay
     Execute
     Verify

 Nelze provést Mocking:
     static methods, private methods, final methods
     Constructor


   http://www.michaelminella.com/testing/unit-testing-with-junit-and-easymock.html

                                                                                      23
Ostatní užitečné odkazy



 XML Unit http://xmlunit.sourceforge.net/

 Unit testy psané v Groovy
   http://www.aspectworks.com/category/blog/testing

 DbUnit http://dbunit.sourceforge.net/howto.html

 Code Coverage Analysis Tool http://cobertura.sourceforge.net/

 Jester Mutation Testing http://jester.sourceforge.net/

 Maven JUnit, TestNG together
   http://stackoverflow.com/questions/1232853/how-to-execute-junit-
   and-testng-tests-in-same-project-using-maven-surefire-plugi

                                                                      24
Otázky a odpovědi




      Otázky?



                    25
Děkuji za Vaši pozornost




                 Martin Ptáček
                 martin.ptacek@wincor-nixdorf.cz
                 +420 739 681 075

                 Wincor Nixdorf s.r.o.
                 Lužná 591, 160 00 Praha 6
                 http://www.wincor-nixdorf.cz



                                                   26

Contenu connexe

Similaire à 2011 Unit Testy

Trendy a nové možnosti test automation
Trendy a nové možnosti test automationTrendy a nové možnosti test automation
Trendy a nové možnosti test automationOndřej Machulda
 
JIRA Zephyr - Test Management
JIRA Zephyr - Test ManagementJIRA Zephyr - Test Management
JIRA Zephyr - Test ManagementOnlio
 
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...Michal Špaček
 
Testování klientských Javascriptových aplikací
Testování klientských Javascriptových aplikacíTestování klientských Javascriptových aplikací
Testování klientských Javascriptových aplikacíMichal Aichinger
 
Bezbolestné testování v Ruby on Rals
Bezbolestné testování v Ruby on RalsBezbolestné testování v Ruby on Rals
Bezbolestné testování v Ruby on RalsJan Kubr
 
Dependency Injection Frameworky
Dependency Injection FrameworkyDependency Injection Frameworky
Dependency Injection FrameworkyRoman Pichlík
 
2019 09-23-snidane qa-public
2019 09-23-snidane qa-public2019 09-23-snidane qa-public
2019 09-23-snidane qa-publicProfinit
 
Vizuální regresní testy
Vizuální regresní testyVizuální regresní testy
Vizuální regresní testyMartin Krištof
 
Open Monday: Jak správně uspořádat uživatelské testování
Open Monday: Jak správně uspořádat uživatelské testováníOpen Monday: Jak správně uspořádat uživatelské testování
Open Monday: Jak správně uspořádat uživatelské testováníH1.cz
 
atoto.cz - jak na snadnou integraci Codeception
atoto.cz - jak na snadnou integraci Codeceptionatoto.cz - jak na snadnou integraci Codeception
atoto.cz - jak na snadnou integraci Codeceptionatotocz
 
Milan Oulehla: Bezpečnost mobilních aplikací na Androidu
Milan Oulehla: Bezpečnost mobilních aplikací na AndroiduMilan Oulehla: Bezpečnost mobilních aplikací na Androidu
Milan Oulehla: Bezpečnost mobilních aplikací na Androidumdevtalk
 
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve SwiftuJan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftumdevtalk
 
Veeam Backup & Replication - Jaroslav Prodělal
Veeam Backup & Replication - Jaroslav ProdělalVeeam Backup & Replication - Jaroslav Prodělal
Veeam Backup & Replication - Jaroslav ProdělalJaroslav Prodelal
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitněJiří Mareš
 
BPTX_2014_1_11320_0_378624_0_158202
BPTX_2014_1_11320_0_378624_0_158202BPTX_2014_1_11320_0_378624_0_158202
BPTX_2014_1_11320_0_378624_0_158202Petr Hude?ek
 
Czjug Zari 2008
Czjug Zari 2008Czjug Zari 2008
Czjug Zari 2008RENESTEIN
 
2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise Aplikací2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise AplikacíMartin Ptáček
 
Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5
Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5
Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5Jaroslav Prodelal
 
Selenium Webdriver - jOpenSpace 2015
Selenium Webdriver - jOpenSpace 2015Selenium Webdriver - jOpenSpace 2015
Selenium Webdriver - jOpenSpace 2015Michal Franc
 

Similaire à 2011 Unit Testy (20)

Trendy a nové možnosti test automation
Trendy a nové možnosti test automationTrendy a nové možnosti test automation
Trendy a nové možnosti test automation
 
JIRA Zephyr - Test Management
JIRA Zephyr - Test ManagementJIRA Zephyr - Test Management
JIRA Zephyr - Test Management
 
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...
 
Testování klientských Javascriptových aplikací
Testování klientských Javascriptových aplikacíTestování klientských Javascriptových aplikací
Testování klientských Javascriptových aplikací
 
Bezbolestné testování v Ruby on Rals
Bezbolestné testování v Ruby on RalsBezbolestné testování v Ruby on Rals
Bezbolestné testování v Ruby on Rals
 
Dependency Injection Frameworky
Dependency Injection FrameworkyDependency Injection Frameworky
Dependency Injection Frameworky
 
2019 09-23-snidane qa-public
2019 09-23-snidane qa-public2019 09-23-snidane qa-public
2019 09-23-snidane qa-public
 
Vizuální regresní testy
Vizuální regresní testyVizuální regresní testy
Vizuální regresní testy
 
Open Monday: Jak správně uspořádat uživatelské testování
Open Monday: Jak správně uspořádat uživatelské testováníOpen Monday: Jak správně uspořádat uživatelské testování
Open Monday: Jak správně uspořádat uživatelské testování
 
atoto.cz - jak na snadnou integraci Codeception
atoto.cz - jak na snadnou integraci Codeceptionatoto.cz - jak na snadnou integraci Codeception
atoto.cz - jak na snadnou integraci Codeception
 
Milan Oulehla: Bezpečnost mobilních aplikací na Androidu
Milan Oulehla: Bezpečnost mobilních aplikací na AndroiduMilan Oulehla: Bezpečnost mobilních aplikací na Androidu
Milan Oulehla: Bezpečnost mobilních aplikací na Androidu
 
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve SwiftuJan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
 
Veeam Backup & Replication - Jaroslav Prodělal
Veeam Backup & Replication - Jaroslav ProdělalVeeam Backup & Replication - Jaroslav Prodělal
Veeam Backup & Replication - Jaroslav Prodělal
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně
 
BPTX_2014_1_11320_0_378624_0_158202
BPTX_2014_1_11320_0_378624_0_158202BPTX_2014_1_11320_0_378624_0_158202
BPTX_2014_1_11320_0_378624_0_158202
 
Czjug Zari 2008
Czjug Zari 2008Czjug Zari 2008
Czjug Zari 2008
 
Testování v PHP
Testování v PHPTestování v PHP
Testování v PHP
 
2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise Aplikací2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise Aplikací
 
Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5
Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5
Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5
 
Selenium Webdriver - jOpenSpace 2015
Selenium Webdriver - jOpenSpace 2015Selenium Webdriver - jOpenSpace 2015
Selenium Webdriver - jOpenSpace 2015
 

Plus de Martin Ptáček

2010 Identifikace a optimalizace výkonu JEE aplikací
2010 Identifikace a optimalizace výkonu JEE aplikací2010 Identifikace a optimalizace výkonu JEE aplikací
2010 Identifikace a optimalizace výkonu JEE aplikacíMartin Ptáček
 
2010 X33EJA Web Services
2010 X33EJA Web Services2010 X33EJA Web Services
2010 X33EJA Web ServicesMartin Ptáček
 
2010 JBoss Application Server
2010 JBoss Application Server2010 JBoss Application Server
2010 JBoss Application ServerMartin Ptáček
 
2009 Uživatelské rozhraní webových aplikací
2009 Uživatelské rozhraní webových aplikací2009 Uživatelské rozhraní webových aplikací
2009 Uživatelské rozhraní webových aplikacíMartin Ptáček
 
2009 X33EJA Moderní Technologie Pro Vývoj JEE
2009 X33EJA Moderní Technologie Pro Vývoj JEE2009 X33EJA Moderní Technologie Pro Vývoj JEE
2009 X33EJA Moderní Technologie Pro Vývoj JEEMartin Ptáček
 
2009 X33EJA Výkonové Aspekty JEE
2009 X33EJA Výkonové Aspekty JEE2009 X33EJA Výkonové Aspekty JEE
2009 X33EJA Výkonové Aspekty JEEMartin Ptáček
 
2010 X33EJA Vysoká Dostupnost JEE Systémů
2010 X33EJA Vysoká Dostupnost JEE Systémů2010 X33EJA Vysoká Dostupnost JEE Systémů
2010 X33EJA Vysoká Dostupnost JEE SystémůMartin Ptáček
 

Plus de Martin Ptáček (7)

2010 Identifikace a optimalizace výkonu JEE aplikací
2010 Identifikace a optimalizace výkonu JEE aplikací2010 Identifikace a optimalizace výkonu JEE aplikací
2010 Identifikace a optimalizace výkonu JEE aplikací
 
2010 X33EJA Web Services
2010 X33EJA Web Services2010 X33EJA Web Services
2010 X33EJA Web Services
 
2010 JBoss Application Server
2010 JBoss Application Server2010 JBoss Application Server
2010 JBoss Application Server
 
2009 Uživatelské rozhraní webových aplikací
2009 Uživatelské rozhraní webových aplikací2009 Uživatelské rozhraní webových aplikací
2009 Uživatelské rozhraní webových aplikací
 
2009 X33EJA Moderní Technologie Pro Vývoj JEE
2009 X33EJA Moderní Technologie Pro Vývoj JEE2009 X33EJA Moderní Technologie Pro Vývoj JEE
2009 X33EJA Moderní Technologie Pro Vývoj JEE
 
2009 X33EJA Výkonové Aspekty JEE
2009 X33EJA Výkonové Aspekty JEE2009 X33EJA Výkonové Aspekty JEE
2009 X33EJA Výkonové Aspekty JEE
 
2010 X33EJA Vysoká Dostupnost JEE Systémů
2010 X33EJA Vysoká Dostupnost JEE Systémů2010 X33EJA Vysoká Dostupnost JEE Systémů
2010 X33EJA Vysoká Dostupnost JEE Systémů
 

2011 Unit Testy

  • 2. Obsah I Úvod II JUnit Framework III Best Practices IV Další nástroje pro podporu unit testování V Otázky a odpovědi 2
  • 3. Úvod  Co je unit testování?  Co je a co není Unit test  Přínosy unit testování  Mýty o unit testování  Programování řízené testy – Test Driven Development (TDD) 3
  • 4. Úvod Co je unit testování?  „In computer programming, unit testing is a method by which individual units of source code are tested to determine if they are fit for use “ -- wikipedia  Činnost úzce spjatá s vývojem aplikačních programů  Proces psaní testů pro všechny metody nebo funkce modulu 4
  • 5. Úvod Co je a co není Unit Test  Unit test je automaticky a samostatně testovatelná část použitelná k potvrzení, že modul (jednotka) zdrojového kódu pracuje správně  Modulem (jednotkou) je testovatelná část aplikačního programu (metoda, funkce, procedura, program atd.)  Isolovaný  Opakovatelný  Rychlý  Samopopisný 5
  • 6. Úvod Co je a co není Unit Test  Test není Unit Testem pokud:  Komunikuje s databází  Komunikuje napříč síťovým prostředím  Spolupracuje se souborovým systémem  Nemůže běžet společně s ostatními unit testy  Musíte provést speciální akce ve vašem prostředí (konfigurace) pro jeho běh  Nelze otestovat v izolaci od ostatních tříd  Vadí nám že Test není úplným Unit Testem?  Kdy, kde a kdo bude unit testy spouštět? 6
  • 7. Úvod Přínosy unit testování  Podporuje izolování částí programu a snadné ověření správné funkčnosti  Zjednodušuje integrační testování  Poskytuje dokumentaci  Zlepšuje kvalitu kódu  Umožňuje bezpečněji provádět refaktoring  Obnovuje sebedůvěru 7
  • 8. Úvod Mýty o unit testování  Nepíšu unit testy protože:  Já chyby nedělám.  Funkcionalita je triviální.  Mě to zdržuje.  Nevím jak testovat. 8
  • 9. Úvod Test Driven Development Design  Programovací technika Test Test  Test-first přístup Implement  Test – Code – Refactor  Účel vytváření testu není kontrola zda kód souhlasí se specifikací, ale testy představují nástroj pro návrh systému.  Vedlejší efekt zaručuje, že veškerý kód je pokryt testy. Test Refactor Code 9
  • 10. JUnit Framework  Framework pro unit testování v jazyce Java  3.x  4.x - Anotation based  Jednoduchý  Volně dostupný  IDE support, Maven support 10
  • 11. JUnit Framework Unit test Class  Standardní Java class  Testovací metoda označena anotací @Test public class SimpleTest { @Test public void testEmptyCollection() { Collection<String> collection = new ArrayList<String>(); assertTrue(collection.isEmpty()); } } 11
  • 12. JUnit Framework Unit test Lifecycle  Anotace @Before @After @BeforeClass @AfterClass public class LifecycleTest { private Collection<String> collection; @BeforeClass public static void oneTimeSetUp() {} @AfterClass public static void oneTimeTearDown() {} @Before public void setUp() { collection = new ArrayList<String>(); } @After public void tearDown() { collection.clear(); } 12 …
  • 13. JUnit Framework Time Test  Pokud test běží déle než definovanou dobu, je ukončen a končí neúspěšně  Anotace @Test(timeout = 1000) public class ExpectedExceptionTest { @Test(expected = ArithmeticException.class) public void divisionWithException() { int i = 1 / 0; System.out.println(i); } } 13
  • 14. JUnit Framework Expected Exception  Testování předpokládaného vyhození výjimky  Anotace @Test(expected = ArithmeticException.class) public class ExpectedExceptionTest { @Test(expected = ArithmeticException.class) public void divisionWithException() { int i = 1 / 0; System.out.println(i); } } 14
  • 15. JUnit Framework Anotace @Ignore  Dočasné vyřazení testu  Anotace @Ignore  Při použití na úrovni třídy vyřazujeme všechny testy  JUnit při spouštění reportuje ignorované testy  Při použití můžeme definovat důvod vyřazení public class IgnoreTest { @Ignore("Temporary ignore during refactoring") @Test public void testEmptyCollection() { System.out.println("Method is not ready yet"); } } 15
  • 16. JUnit Framework Suite Test  Seskupování testů  Anotace @Suite @RunWith(Suite.class) @Suite.SuiteClasses({ SimpleTest.class, LifecycleTest.class }) public class SuiteTest { } 16
  • 17. Unit Testing Best Practices  Dodržujte konvence při vytváření unit testu  Používejte Assertions při tvorbě testu  Informativní zprávy http://joe.truemesh.com/blog/000511.html  Vytvářejte rychlé unit testy  Spouštějte unit testy automaticky  Maven, Jenkins http://jenkins-ci.org/  Oddělujte unit testy pro jednotlivé business moduly  Oddělujte unit testy podle jejich typu  Spouštěné uživatelem, spouštěné při vývoji, integrační atd. 17
  • 18. Unit Testing Best Practices Konvence  Jméno třídy by mělo končit sufixem „Test“  Jméno metody by mělo začínat prefixem „test“  Návratová hodnota musí být „void“  Metoda nesmí vyhazovat výjimku 18
  • 19. Další nástroje pro podporu unit testování  TestNG  Podpora unit testování v Maven  Mocking  EasyMock knihovna  … 19
  • 20. Další nástroje pro podporu unit testování TestNG  Unit test framework  TestNG versus JUnit  Suite Test using XML  Expected Exception Message ReqExp  Parameterized Tests  Dependency Test  Invocation Count Test  @BeforeSuite, @AfterSuite, @BeforeTest, @AfterTest  Groups  IDE support, Maven support 20
  • 21. Další nástroje pro podporu unit testování Podpora unit testování v Maven  Maven Surefire plugin  http://maven.apache.org/plugins/maven-surefire-plugin/  Spouští unit testy během test lifecycle phase  Wildcard default patterns:  **/Test*.java  **/*Test.java  **/*TestCase.java  JUnit, TestNG and POJO Test support  Reports  TXT and XML  HTML reports - Maven Surefire Report Plugin  http://maven.apache.org/plugins/maven-surefire-report-plugin/ 21
  • 22. Další nástroje pro podporu unit testování Mocking  Mock Object je simulovaný objekt, který napodobuje chování reálného objektu řízeným způsobem.  “You build something that works as something else”  Frameworks  EasyMock http://easymock.org/  PowerMock http://code.google.com/p/powermock/  Mockito, jMockit etc. 22
  • 23. Další nástroje pro podporu unit testování EasyMock knihovna  EasyMock http://easymock.org/  Process  Create Mock, Record Expectations  Replay  Execute  Verify  Nelze provést Mocking:  static methods, private methods, final methods  Constructor  http://www.michaelminella.com/testing/unit-testing-with-junit-and-easymock.html 23
  • 24. Ostatní užitečné odkazy  XML Unit http://xmlunit.sourceforge.net/  Unit testy psané v Groovy http://www.aspectworks.com/category/blog/testing  DbUnit http://dbunit.sourceforge.net/howto.html  Code Coverage Analysis Tool http://cobertura.sourceforge.net/  Jester Mutation Testing http://jester.sourceforge.net/  Maven JUnit, TestNG together http://stackoverflow.com/questions/1232853/how-to-execute-junit- and-testng-tests-in-same-project-using-maven-surefire-plugi 24
  • 25. Otázky a odpovědi Otázky? 25
  • 26. Děkuji za Vaši pozornost Martin Ptáček martin.ptacek@wincor-nixdorf.cz +420 739 681 075 Wincor Nixdorf s.r.o. Lužná 591, 160 00 Praha 6 http://www.wincor-nixdorf.cz 26