SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Kata - Java - Tests - JUnit 4

Author: Artem Kaftanenko
B-S-S GmbH, Dresden; Datum: 20.02.2012
1.1 Automatisierte Tests - Einführung



  Testklassen-Struktur

   » Initialisierungs-Methoden
   » Testfall-Methoden
   » Helper-Methoden

  Integration ins automatisierte Testprozess

   » mittels zahlreichen Frameworks
   » Beispiele:
       - Java: Junit, TestNG, Cactus, ...
       - JS: JSUnit, QUnit, ...
       - ...


  Als ein Referenz-Framework wird im Weiteren der JUnit betrachtet


                                                                 2
1.2 Referenzbeispiel - JUnit - Einbindung


  Mittels Maven

  <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.8.1</version>
     <scope>test</scope>
  </dependency>

  Framework-Namensräume
   •   org.junit.*
   •   org.hamcrest.*

  Testklassen, Test-/Initialisierungs-Methoden werden ausgezeichnet
   » mittels Annotationen




                                                                      3
1.3 Referenzbeispiel - JUnit - Annotationen


  für Testklassen
   » keine Pflicht-Annotationen.

  für die Testmethoden (Pflicht):
   » @Test

  für die Initialisierungsmethoden (optional):
   » @Before
   » @After
        - werden ausgeführt vor bzw. nach jeder Testmethode.

   » @BeforeClass
   » @AfterClass
        - ein Mal vor bzw. nach einer Testklasseninstanziierung, d.h. ein Mal für den ganzen Satz
          der Testmethoden (die annotierten Methoden müssen "static" sein).



                                                                                                4
1.4 Referenzbeispiel - JUnit - Assertions



     Die eigentliche Überprüfung erfolgt mittels s.g. assert-Methoden.

     Beispiele*:

       » fail()
       »
       » assertTrue(booleanValue)
       » assertFalse(booleanValue)

       » assertNull(objectValue)
       » assertNotNull(objectValue)

       » assertEquals(expectedValue, value)
___
* erhältlich per import static org.junit.Assert.*;


                                                                         5
Kata - JUnit (1) - SimpleCalculatorMultiplicationTest




    SimpleCalculatorMultiplicationTest* implementieren für:

      » SimpleCalculatorApp#mul(...) Methode


    Zu beachten

      » aktive Anwendung der vorgestellten Methoden
      » Ermittlung maximal möglicher Anzahl der fachlich relevanten Testfälle




___
* das Skeleton-Projekt erhältlich unter https://github.com/kaftanenko/edu.java



                                                                                 6
2.1 ... - JUnit - parametrisierte Tests


  Falls die Testlogik von einem Testfall zu einem anderen gleich ist
  und die Testfälle sich nur durch die Testdatensätze unterscheiden:

   @RunWith(Parameterized.class)
   public class TestClass {

       public TestClass(Arg1Type arg1, Arg2Type arg2, ...) { ... }

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

       @Parameterized.Parameters
       public static List<Object[]> testData() {
                 return ...;
       }
   }


                                                                       7
Kata - JUnit (2) - SimpleCalculatorAdditionTest



    SimpleCalculatorAdditionTest implementieren für:

      » SimpleCalculatorApp#add(...) Methode


    Zu beachten

      » es sollte einen parametriesierten Test sein




___
* das Skeleton-Projekt erhältlich unter https://github.com/kaftanenko/edu.java



                                                                                 8
3.1 ... - JUnit - Integration der Spring-DI



  Falls die Verwendung der Spring-DI erwünscht ist:

   @RunWith(SpringJUnit4ClassRunner.class)
   @ContextConfiguration({ "<class-path-to-spring-bean-context-file>", ... })
   public class TestClass {

        @Autowired
        private ISomeService serviceUnderTest;

        ...
   }




                                                                                9
3.2 ... - JUnit - Integration der Spring-DI



  Benötigt zusätzliche Abhängigkeiten

   » org.springframework.core
   » org.springframework.context (?)

   » org.springframework.test
   » apache.commons.logging




                                              10
Kata - JUnit (3) - SimpleCalculatorDivisionTest



    SimpleCalculatorDivisionTest implementieren für:

      » SimpleCalculatorApp#div(...) Methode


    Zu beachten

      » Spring Dependency Injection einsetzen




___
* das Skeleton-Projekt erhältlich unter https://github.com/kaftanenko/edu.java



                                                                                 11
Vielen Dank!


  Microsoft „Partner of the year 2010“ Finalist


  Ausgezeichnet von Gartner als „Cool Vendor 2010“ in Content Management




B-S-S Business Software Solutions GmbH
Wartburgstrasse 1
99817 Eisenach/Germany

Tel.            +49 3691 709000
Mail            kontakt@b-s-s.de
Web             www.b-s-s.de




                                                                           12

Weitere ähnliche Inhalte

Ähnlich wie Kata - Java - Tests - JUnit 4

BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...Marc Müller
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTddjlink
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeldgedoplan
 
JSF Testing - Tools und Technics
JSF Testing - Tools und TechnicsJSF Testing - Tools und Technics
JSF Testing - Tools und Technicsadesso AG
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsGFU Cyrus AG
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptSebastian Springer
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir seincodepitbull
 
Softwarequalitätssicherung mit Continuous Integration Tools
 Softwarequalitätssicherung mit Continuous Integration Tools Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Toolsgedoplan
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Joachim Baumann
 
The state of JavaScript Linting - Deutsche Version
The state of JavaScript Linting - Deutsche VersionThe state of JavaScript Linting - Deutsche Version
The state of JavaScript Linting - Deutsche VersionMichael Kühnel
 
eCATT & OpenSource - Automatisierter Test in heterogenen Systemlandschaften
eCATT & OpenSource - Automatisierter Test in heterogenen SystemlandschafteneCATT & OpenSource - Automatisierter Test in heterogenen Systemlandschaften
eCATT & OpenSource - Automatisierter Test in heterogenen SystemlandschaftenChristoph Menke
 
Scala - OSGi Bundles from Outer (Java) Space
Scala - OSGi Bundles from Outer (Java) SpaceScala - OSGi Bundles from Outer (Java) Space
Scala - OSGi Bundles from Outer (Java) SpaceOliver Braun
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...Marc Müller
 
Automatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumAutomatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumBenjamin Schmid
 
Drohnen und WARP-Antriebe
Drohnen und WARP-AntriebeDrohnen und WARP-Antriebe
Drohnen und WARP-Antriebeberndmueller
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungChristian Baranowski
 

Ähnlich wie Kata - Java - Tests - JUnit 4 (20)

BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTdd
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
 
JSF Testing - Tools und Technics
JSF Testing - Tools und TechnicsJSF Testing - Tools und Technics
JSF Testing - Tools und Technics
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
A/B Testing mit Node.js
A/B Testing mit Node.jsA/B Testing mit Node.js
A/B Testing mit Node.js
 
Feature Flags mit Togglz
Feature Flags mit TogglzFeature Flags mit Togglz
Feature Flags mit Togglz
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir sein
 
Softwarequalitätssicherung mit Continuous Integration Tools
 Softwarequalitätssicherung mit Continuous Integration Tools Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
The state of JavaScript Linting - Deutsche Version
The state of JavaScript Linting - Deutsche VersionThe state of JavaScript Linting - Deutsche Version
The state of JavaScript Linting - Deutsche Version
 
eCATT & OpenSource - Automatisierter Test in heterogenen Systemlandschaften
eCATT & OpenSource - Automatisierter Test in heterogenen SystemlandschafteneCATT & OpenSource - Automatisierter Test in heterogenen Systemlandschaften
eCATT & OpenSource - Automatisierter Test in heterogenen Systemlandschaften
 
Scala - OSGi Bundles from Outer (Java) Space
Scala - OSGi Bundles from Outer (Java) SpaceScala - OSGi Bundles from Outer (Java) Space
Scala - OSGi Bundles from Outer (Java) Space
 
Testing tools
Testing toolsTesting tools
Testing tools
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
 
Automatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumAutomatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit Selenium
 
Drohnen und WARP-Antriebe
Drohnen und WARP-AntriebeDrohnen und WARP-Antriebe
Drohnen und WARP-Antriebe
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
 

Kata - Java - Tests - JUnit 4

  • 1. Kata - Java - Tests - JUnit 4 Author: Artem Kaftanenko B-S-S GmbH, Dresden; Datum: 20.02.2012
  • 2. 1.1 Automatisierte Tests - Einführung Testklassen-Struktur » Initialisierungs-Methoden » Testfall-Methoden » Helper-Methoden Integration ins automatisierte Testprozess » mittels zahlreichen Frameworks » Beispiele: - Java: Junit, TestNG, Cactus, ... - JS: JSUnit, QUnit, ... - ... Als ein Referenz-Framework wird im Weiteren der JUnit betrachtet 2
  • 3. 1.2 Referenzbeispiel - JUnit - Einbindung Mittels Maven <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> <scope>test</scope> </dependency> Framework-Namensräume • org.junit.* • org.hamcrest.* Testklassen, Test-/Initialisierungs-Methoden werden ausgezeichnet » mittels Annotationen 3
  • 4. 1.3 Referenzbeispiel - JUnit - Annotationen für Testklassen » keine Pflicht-Annotationen. für die Testmethoden (Pflicht): » @Test für die Initialisierungsmethoden (optional): » @Before » @After - werden ausgeführt vor bzw. nach jeder Testmethode. » @BeforeClass » @AfterClass - ein Mal vor bzw. nach einer Testklasseninstanziierung, d.h. ein Mal für den ganzen Satz der Testmethoden (die annotierten Methoden müssen "static" sein). 4
  • 5. 1.4 Referenzbeispiel - JUnit - Assertions Die eigentliche Überprüfung erfolgt mittels s.g. assert-Methoden. Beispiele*: » fail() » » assertTrue(booleanValue) » assertFalse(booleanValue) » assertNull(objectValue) » assertNotNull(objectValue) » assertEquals(expectedValue, value) ___ * erhältlich per import static org.junit.Assert.*; 5
  • 6. Kata - JUnit (1) - SimpleCalculatorMultiplicationTest SimpleCalculatorMultiplicationTest* implementieren für: » SimpleCalculatorApp#mul(...) Methode Zu beachten » aktive Anwendung der vorgestellten Methoden » Ermittlung maximal möglicher Anzahl der fachlich relevanten Testfälle ___ * das Skeleton-Projekt erhältlich unter https://github.com/kaftanenko/edu.java 6
  • 7. 2.1 ... - JUnit - parametrisierte Tests Falls die Testlogik von einem Testfall zu einem anderen gleich ist und die Testfälle sich nur durch die Testdatensätze unterscheiden: @RunWith(Parameterized.class) public class TestClass { public TestClass(Arg1Type arg1, Arg2Type arg2, ...) { ... } @Test public void testMethod() { ... } @Parameterized.Parameters public static List<Object[]> testData() { return ...; } } 7
  • 8. Kata - JUnit (2) - SimpleCalculatorAdditionTest SimpleCalculatorAdditionTest implementieren für: » SimpleCalculatorApp#add(...) Methode Zu beachten » es sollte einen parametriesierten Test sein ___ * das Skeleton-Projekt erhältlich unter https://github.com/kaftanenko/edu.java 8
  • 9. 3.1 ... - JUnit - Integration der Spring-DI Falls die Verwendung der Spring-DI erwünscht ist: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "<class-path-to-spring-bean-context-file>", ... }) public class TestClass { @Autowired private ISomeService serviceUnderTest; ... } 9
  • 10. 3.2 ... - JUnit - Integration der Spring-DI Benötigt zusätzliche Abhängigkeiten » org.springframework.core » org.springframework.context (?) » org.springframework.test » apache.commons.logging 10
  • 11. Kata - JUnit (3) - SimpleCalculatorDivisionTest SimpleCalculatorDivisionTest implementieren für: » SimpleCalculatorApp#div(...) Methode Zu beachten » Spring Dependency Injection einsetzen ___ * das Skeleton-Projekt erhältlich unter https://github.com/kaftanenko/edu.java 11
  • 12. Vielen Dank! Microsoft „Partner of the year 2010“ Finalist Ausgezeichnet von Gartner als „Cool Vendor 2010“ in Content Management B-S-S Business Software Solutions GmbH Wartburgstrasse 1 99817 Eisenach/Germany Tel. +49 3691 709000 Mail kontakt@b-s-s.de Web www.b-s-s.de 12