Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

TDD mit JUnit und Mockito

377 vues

Publié le

Einführung in testgetriebene Software-Entwicklung mit JUnit und Mockito.

Publié dans : Logiciels
  • Soyez le premier à commenter

TDD mit JUnit und Mockito

  1. 1. 1 TDD mit JUnit & Mockito Tobias Trelle, codecentric AG @tobiastrelle
  2. 2. Tobias Trelle Software Architekt @ codecentric AG Twitter: @tobiastrelle Slideshare:  GitHub:  http://de.slideshare.net/tobiastrelle/ https://github.com/ttrelle
  3. 3. 2 3 Agenda TDD - Test Driven Development JUnit Mockito Zusammen in Aktion!
  4. 4. 4 Tests should be written FIRST Fast: Einzeln und in Summe schnell ausführbar Isolated: Unabhängig voneinander und externen Faktoren Repeatable: Immer gleiche Ergebnisse liefern Self-validating: Test-Ergebnis ist ohne menschl. Aufsicht feststellbar Timely: Zeitnah
  5. 5. 5 . 1 TDD Test Driven Development
  6. 6. 5 . 2 TDD Lifecycle
  7. 7. 5 . 3 TDD Lifecycle Red --> Green: Minimale Implementierung / "Fake it" Refactor: Code-Duplikation beseitigen Green --> Red: neuer Test Stets kleine bis kleinste Iterationen, diese führen zu Verallgemeinerungen
  8. 8. 5 . 4 Vorteile von TDD Schnelles Feedback Hohe Test-Abdeckung Code ist testbar Sicherheit bei Refactorings Testfall als Spezifikation der Implementierung
  9. 9. Literatur
  10. 10. 5 . 5
  11. 11. 6 . 1 JUnit http://junit.org
  12. 12. 6 . 2 JUnit Java-Implementierung von xUnit Test Framework Defacto-Standard im Java-Bereich
  13. 13. 6 . 3 Aktuelle stabile Version: 4.12 <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.12</version> <scope>test</scope> </dependency>
  14. 14. 6 . 4 JUnit Features Defintion von Test Fixtures Test-Ausführung Assertions Rules Definition Test-Suiten Integration in IDE / CI-Build
  15. 15. 6 . 5 JUnit - Einfaches Beispiel public class VnrGeneratorTest { private VnrGenerator generator; /** Unit under test. */ private LocalDateTime stichtag; /** Fixture */ @Before public void setUp() { generator = new VnrGenerator(); stichtag = LocalDateTime.of(2017, Month.FEBRUARY, 17, 0, 0); } @Test public void vnr_erzeugung() { // gegeben sei String sachgebiet = "LN"; String name = "Fasel"; // wenn String vnr = generator.neueVnr(sachgebiet, stichtag, name); // dann assertThat(vnr, is("LN-20170217-F001")); } }
  16. 16. 6 . 6 TDD Live Coding #1
  17. 17. 7 . 1 Mockito http://site.mockito.org/
  18. 18. Tasty mocking framework for unit tests in Java  to mock: etwas vortäuschen
  19. 19. 7 . 2 7 . 3 Aktuelle stabile Version: 2.7.15 <dependency> <groupid>org.mockito</groupid> <artifactid>mockito-core</artifactid> <version>2.7.15</version> <scope>test</scope> </dependency>
  20. 20. 7 . 4 Mockito Features Mocking Spying Captors Verifying
  21. 21. 7 . 5 Mocken von Abhängigkeiten
  22. 22. VnrGenerator benötigt VnrDao public class VnrGenerator { private VnrDao dao; public VnrGenerator(VnrDao dao) { this.dao = dao; } public String neueVnr(String sachgebiet, LocalDate stichtag, String final String sgDatum = // sachgebiet + "-" + // stichtag.format(DateTimeFormatter.ISO_LOCAL_DATE); final String ersterBuchstabe = nachname.substring(0,1); final int lnr = ermittleLaufnummerZu(stichtag, ersterBuchstabe); return sgDatum + "-" + String.format("%s%03d", ersterBuchstabe, lnr); } private int ermittleLaufnummerZu(LocalDate stichtag, String ersterBuchsta return dao.naechsteFreiLaufnummer(stichtag, ersterBuchstabe); } }
  23. 23. 7 . 6 Mockito Fixture @RunWith(MockitoJUnitRunner.class) public class VnrGeneratorTest { @Mock private VnrDao daoMock; private VnrGenerator generator; /** Unit under test. */ private LocalDate stichtag; /** Fixture */ @Before public void setUp() { generator = new VnrGenerator(daoMock); stichtag = LocalDate.of(2017, Month.FEBRUARY, 28); } ... }
  24. 24. 7 . 7 Mockito im Testfall @Test public void vnr_erzeugung() { // gegeben sei String sachgebiet = "LN"; String name = "Fasel"; when( daoMock.naechsteFreiLaufnummer(stichtag, "F") ).thenReturn(1); // wenn String vnr = generator.neueVnr(sachgebiet, stichtag, name); // dann verify(daoMock).naechsteFreiLaufnummer(stichtag, "F"); verifyNoMoreInteractions(daoMock); assertThat(vnr, is("LN-2017-02-28-F001")); }
  25. 25. 7 . 8 Mockito im Testfall - BDD Style @Test public void vnr_erzeugung() { // gegeben sei String sachgebiet = "LN"; String name = "Fasel"; given( daoMock.naechsteFreiLaufnummer(stichtag, "F") ) .willReturn(1); // wenn String vnr = generator.neueVnr(sachgebiet, stichtag, name); // dann then(daoMock).should().naechsteFreiLaufnummer(stichtag, "F"); then(daoMock).shouldHaveNoMoreInteractions(); assertThat(vnr, is("LN-2017-02-28-F001")); }
  26. 26. 7 . 9 7 . 10 TDD Live Coding #2
  27. 27. 7 . 11 Grenzen von Mockito Finale Klassen / Methoden Statische Methoden Abhilfe: PowerMock für Mockito
  28. 28. TDD mit JUnit & Mockito - Tobias Trelle, codecentric AG 8 Danke für Ihre Aufmerksamkeit Tobias Trelle, codecentric AG @tobiastrelle 

×