Unit Testy
Obsah I    ÚvodII    JUnit FrameworkIII   Best PracticesIV    Další nástroje pro podporu unit testováníV     Otázky a odpo...
Ú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é...
Úvod            Co je unit testování? „In computer programming, unit testing is a method by which  individual units of so...
Úvod            Co je a co není Unit Test Unit test je automaticky a samostatně testovatelná  část použitelná k potvrzení...
Úvod             Co je a co není Unit Test Test není Unit Testem pokud:   Komunikuje s databází   Komunikuje napříč síť...
Úvod           Přínosy unit testování Podporuje izolování částí programu a snadné ověření správné  funkčnosti Zjednodušu...
Úvod           Mýty o unit testování Nepíšu unit testy protože:    Já chyby nedělám.    Funkcionalita je triviální.   ...
Úvod             Test Driven Development                                                      Design Programovací technik...
JUnit Framework Framework pro unit testování v jazyce Java   3.x   4.x - Anotation based Jednoduchý Volně dostupný I...
JUnit Framework                  Unit test Class Standardní Java class Testovací metoda označena anotací @Testpublic cla...
JUnit Framework                  Unit test Lifecycle Anotace @Before @After @BeforeClass @AfterClasspublic class Lifecycl...
JUnit Framework               Time Test Pokud test běží déle než definovanou dobu, je ukončen a  končí neúspěšně Anotace...
JUnit Framework               Expected Exception Testování předpokládaného vyhození výjimky Anotace @Test(expected = Ari...
JUnit Framework                  Anotace @Ignore Dočasné vyřazení testu Anotace @Ignore     Při použití na úrovni třídy...
JUnit Framework               Suite Test Seskupování testů Anotace @Suite@RunWith(Suite.class)@Suite.SuiteClasses({     ...
Unit Testing Best Practices Dodržujte konvence při vytváření unit testu Používejte Assertions při tvorbě testu    Infor...
Unit Testing Best Practices           Konvence Jméno třídy by mělo končit sufixem „Test“ Jméno metody by mělo začínat pr...
Další nástroje pro podporu unit testování TestNG Podpora unit testování v Maven Mocking EasyMock knihovna …          ...
Další nástroje pro podporu unit testování             TestNG Unit test framework TestNG versus JUnit   Suite Test using...
Další nástroje pro podporu unit testování              Podpora unit testování v Maven Maven Surefire plugin   http://mav...
Další nástroje pro podporu unit testování            Mocking Mock Object je simulovaný objekt, který napodobuje chování  ...
Další nástroje pro podporu unit testování                EasyMock knihovna EasyMock http://easymock.org/ Process     Cr...
Ostatní užitečné odkazy XML Unit http://xmlunit.sourceforge.net/ Unit testy psané v Groovy   http://www.aspectworks.com/...
Otázky a odpovědi      Otázky?                    25
Děkuji za Vaši pozornost                 Martin Ptáček                 martin.ptacek@wincor-nixdorf.cz                 +42...
Upcoming SlideShare
Loading in …5
×

2011 Unit Testy

1,321 views

Published on

Unit testing with frameworks JUnit and TestNG, mocking with EasyMock

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,321
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

2011 Unit Testy

  1. 1. Unit Testy
  2. 2. Obsah I ÚvodII JUnit FrameworkIII Best PracticesIV Další nástroje pro podporu unit testováníV Otázky a odpovědi 2
  3. 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. 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. 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. 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. 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. 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. 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. 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. 11. JUnit Framework Unit test Class Standardní Java class Testovací metoda označena anotací @Testpublic class SimpleTest { @Test public void testEmptyCollection() { Collection<String> collection = new ArrayList<String>(); assertTrue(collection.isEmpty()); }} 11
  12. 12. JUnit Framework Unit test Lifecycle Anotace @Before @After @BeforeClass @AfterClasspublic 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. 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. 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. 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. 16. JUnit Framework Suite Test Seskupování testů Anotace @Suite@RunWith(Suite.class)@Suite.SuiteClasses({ SimpleTest.class, LifecycleTest.class})public class SuiteTest {} 16
  17. 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. 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. 19. Další nástroje pro podporu unit testování TestNG Podpora unit testování v Maven Mocking EasyMock knihovna … 19
  20. 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. 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. 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. 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. 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. 25. Otázky a odpovědi Otázky? 25
  26. 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

×