advertisement

Feige sein! Testen im Java-EE-Umfeld

50 %
50 %
advertisement
Information about Feige sein! Testen im Java-EE-Umfeld
Technology

Published on February 17, 2014

Author: gedoplan

Source: slideshare.net

Description

GEDOPLAN-Vortrag zum Thema Unit Tests, Multi Unit Tests und Integration Tests insbesondere für Anwendungen auf Basis der Java EE. (www.gedoplan.de)
advertisement

Feige sein! Testen im EE-Umfeld Dirk Weil, GEDOPLAN GmbH

Dirk Weil GEDOPLAN GmbH, Bielefeld Java EE seit 1998 Konzeption und Realisierung Vorträge Seminare Veröffentlichungen Feige sein! 2

Testen Bei mir läuft's! EE-Tests sind zu aufwändig. Gestern ging‘s noch (und ich hab‘ nix gemacht). Wir haben keinen Testserver Feige sein! Dafür haben wir kein Budget. 3

Testen Testen ist feige! … dann lassen Sie uns feige sein! Feige sein! 4

EE-Tests Komplexe Komponenten-Landschaft CDI / EJB @Inject, @Produces, @Alternative … Plattform @PersistenceContext, @Transactional, … Web @Named, @XyzScoped, @Path Feige sein! 5

Ausführungszeit Was und wie schnell? SE-Test Integration Test Unit Test Einzelklasse Feige sein! In-Container-Test embedded real Multi Unit Test Service (inkl. Umgebung) Komponente Subsystem Anwendung Testtiefe 6

Beispielprojekt ShopModel + Views Bestellung BestellPosition BestellungRepository Artikel ArtikelRepository WaehrungModel + Views WaehrungRestService Waehrung WaehrungService WaehrungRepository EntityManager / PU Feige sein! TX Manager 7

Unit Test Test: Umrechnung in WaehrungService Mock für WaehrungRepository Toolset: JUnit, Mockito WaehrungService Waehrung WaehrungRepository Feige sein! 8

Multi Unit Test Test: Umrechnung in WaehrungService Test-DB statt Prod-DB Toolset: JUnit, CDI-Container alternativer Producer für EntityManager TX-Interceptor Waehrung WaehrungService WaehrungRepository EntityManager / PU Feige sein! TX Manager 9

Multi Unit Test Ausgenutzte Goodies Apache Deltaspike Container-Start Context Start Injection CDI 1.1 / Java EE 7 @Priority aktiviert Alternative / Interceptor Interceptor Binding @Transactional Feige sein! 10

Testdaten-Bereitstellung Bulk Load Skript, DBUnit, … <waehrung id="USD"> … Manuell Prod Extract, … >import 2013-11-07.dump Anwendungs-API EntityManager, XyzRepository Feige sein! 11

Testdaten-Bereitstellung Daten vor dem Test löschen … höhere Komponenten zuerst … und neu laden niedere Komponenten zuerst Daten nach Test stehen lassen! Lässt sich gut mit CDI implementieren Feige sein! 12

Integration Tests Test in Java EE Server Test von Komponenten inkl. der davon genutzten Schichten Zugriff auf alle Java-EE-Ressourcen „echte“ Persistence Unit (mit Test-DB) „echter“ Transaction Manager Toolset: JUnit, Arquillian, EE Server Feige sein! 13

Arquillian Server Lifecycle (Start/Stop) Erstellung von Deployment Archives Deployment (+Undeployment) Integration mit JUnit und TestNG Testausführung Server: White Box Test Client: Black Box Test Diverse Erweiterungen Feige sein! 14

Arquillian Managed Mode Server starten Remote Mode Archiv erstellen und deployen Tests durchführen Archiv undeployen Server stoppen Feige sein! weitere Testklasse? 15

Arquillian Container-Wahl durch Classpath verfügbare Container: https://docs.jboss.org/author/display/ARQ/Container+adapters <dependency> <groupId>org.jboss.arquillian.junit</groupId> <artifactId>arquillian-junit-container</artifactId> <scope>test</scope> </dependency> <profiles> <profile> <id>astest_wildfly-8.0-managed</id> <dependencies> <dependency> <groupId>org.wildfly</groupId> <artifactId>wildfly-arquillian-container-managed</artifactId> <scope>test</scope> </dependency> Feige sein! 16

Arquillian JUnit Testrunner Deployment mit ShrinkWrap erstellen neuen Archivnamen nutzen (z. B. UUID) richtige Endung! @RunWith(Arquillian.class) public class WaehrungServiceIntegrationTest { @Deployment public static WebArchive createDeployment() { WebArchive archive = ShrinkWrap.create(WebArchive.class, deploymentUnitName + ".war"); archive.addClasses(…); archive.addAsWebInfResource(…); archive.addAsResource(…); archive.addAsLibraries(…); Feige sein! 17

Arquillian White Box Test @Deployment(testable=true) (Default) Testklasse wird mit deployt @Inject etc. nutzbar @RunWith(Arquillian.class) public class WaehrungServiceIntegrationTest { … @Inject WaehrungService waehrungService; @Test public void testUmrechnenUSD() { … BigDecimal actual = this.waehrungService.umrechnen(fremdBetrag, fremdWaehrungId); Assert.assertEquals("Euro-Betrag", expected, actual); Feige sein! 18

Arquillian White Box Test WaehrungService Waehrung WaehrungRepository TX Manager Ausgenutzte Goodies Passend erstelltes Deployment angepasste PU-Definition EntityManager / PU Feige sein! 19

Arquillian Black Box Test @Deployment(testable=false) Test läuft im Client (IDE, Maven, etc.) Zugriff nur Remote @RunWith(Arquillian.class) public class WaehrungServiceRemoteIntegrationTest { @Deployment(testable = false) public static WebArchive createDeployment() { @RunWith(Arquillian.class) public class WaehrungRestServiceIntegrationTest { @Deployment(testable = false) public static WebArchive createDeployment() { Feige sein! 20

Arquillian Black Box Test Remote EJB Benötigt Client Lib des Servers Service Locator @RunWith(Arquillian.class) public class WaehrungServiceRemoteIntegrationTest { … @Test public void testUmrechnenUSD() { … WaehrungServiceRemote waehrungService ‚ = ServiceLocator.getEjb(WaehrungServiceRemote.class, …); BigDecimal actual = waehrungService.umrechnen(fremdBetrag, fremdWaehrungId); Assert.assertEquals("Euro-Betrag", expected, actual); Feige sein! 21

Arquillian Black Box Test REST Service JAX-RS 2.0 / Java EE 7: Client API @RunWith(Arquillian.class) public class WaehrungServiceRemoteIntegrationTest { … @Test public void testUmrechnenUSD() { … Client client = ClientBuilder.newClient(); WebTarget target = client.target(serverUrlWebContext + …); BigDecimal actual = target.request(MediaType.TEXT_PLAIN).get(BigDecimal.class); Assert.assertEquals("Euro-Betrag", expected, actual); Feige sein! 22

Drone Arquillian-Erweiterung für Selenium Browser-Fernsteuerung Drone übernimmt Lifecycle-Steuerung des ggf. nötigen Browsers @Drone injiziert WebDriver (=Fernsteuerung) Browser wählbar via arquillian.xml Firefox, Crome, IE, HtmlUnit, PhantomJS, … häufig per Maven-Profil Feige sein! 23

Drone WaehrungModel + Views WaehrungService Waehrung WaehrungRepository EntityManager / PU Feige sein! TX Manager 24

Drone @RunWith(Arquillian.class) public class WaehrungGuiIntegrationTest { … @Drone WebDriver webDriver; @Test public void testUmrechnenUSD() { … this.webDriver.get(serverUrlWebContext + "/demo/waehrungsrechner.xhtml"); WebElement fremdBetragField = this.webDriver.findElement(By.id("form:fremdBetrag")); fremdBetragField.clear(); fremdBetragField.sendKeys(fremdBetrag.toString()); … WebElement umrechnenButton = this.webDriver.findElement(By.id("form:umrechnen")); umrechnenButton.click(); WebElement euroBetragField = this.webDriver.findElement(By.id("form:euroBetrag")); String actual = euroBetragField.getText(); Assert.assertEquals("Eurowert", expected, actual); Feige sein! 25

Drone Grey Box Test Web GUI Fernbedienung wie zuvor Abfrage des serverseitigen Zustands z. B. mittels Remote EJB @RunWith(Arquillian.class) public class ShopGuiIntegrationTest { @Test public void testCreateBestellung() { … this.webDriver.get(serverUrlWebContext + "/demo/waehrungsrechner.xhtml"); … ShopGuiIntegrationTestInspectorRemote inspector = ServiceLocator.getEjb(ShopGuiIntegrationTestInspectorRemote.class, …); Assert.assertTrue("Bestellung nicht gespeichert", inspector.checkBestellungExists(expected)); Feige sein! 26

Arquillian Extensions Persistence JaCoCo Performance Warp Graphene Initialisierung, Validierung und Cleanup der Datenbank Code Coverage Monitoring Prüfung der Ausführungszeit Grey Box Testing mit Drone Selenium-Erweiterung u. a. mit AJAXUnterstützung und JQuery-Selektion … Feige sein! 27

Arquillian Experience Mächtiges Werkzeug Dokumentation je nach Extension sehr gut bis nicht vorhanden Aufwändige Konfiguration JAR-Hölle Ausführungsgeschwindigkeit Feige sein! 28

Links Beispielprojekt https://github.com/dirkweil/feige-sein Arquillian http://arquillian.org/ Arquillian Testing Guide http://www.packtpub.com/arquillian-testing-guide/book Feige sein! 29

Mehr Infos Java-EE-Blog http://javaeeblog.wordpress.com/ Expertenkreis Java http://expertenkreisjava.blogspot.de Schulung, Projektunterstützung etc. dirk.weil@gedoplan.de Feige sein! 30

More Seminare zum Thema, z. B. Java Software Testing http://javaeeblog.wordpress.com/ http://expertenkreisjava.blogspot.de/  dirk.weil@gedoplan.de @dirkweil Feige sein! 32 dirk.weil@gedoplan.de

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...

Related pages

Feigen - Fruitlife: Portal für Obst mit Früchtelexikon ...

... sie sollten dunkelviolett bzw. gelbweiß sein. Sie ... Sie sollten sehr geschützt abgepackt sein. Denn frische Feigen sind ... Testen Sie ...
Read more

Java EE Day | JAX

12. bis 16. Mai 2014 | Mainz. Expo: 13. bis 15. Mai 2014. Menü Main menu. Konferenz. Überblick; Advisory Board; Veranstalter; Archiv; Programm
Read more

Feige `Dalmatie`/Ficus carica: Amazon.de: Garten

Amazon.de Prime testen ... Ob und wann dieser Artikel wieder vorrätig sein wird ... Die violettblauen süßen Früchte der Feige `Dalmatie` können im ...
Read more

Lieber einmal im Leben feige sein als für immer tot ...

Lieber einmal im Leben feige sein als für immer tot. Foto: ALFA. Die Jugendkriminalität nehme langsam, ... Testen Sie unsere exklusiven Inhalte. Digital.
Read more

Feige sein! - bed-con.org::Talks

Feige sein! Dirk Weil. Auch wenn "Testen feige ist" wissen wir, ...
Read more

Feige - Feigen

Feige wissenschaftl. Name ... sie sollten dunkelviolett bzw. gelbweiß sein. Sie ... Testen Sie verschiedene Produkte oder nutzen Sie Ihr ...
Read more

Trockenfrüchte - Tipps - Meldung - Stiftung Warentest

... Sie fanden beim letzten Test von frischen ... Unverpackte Feigen trocknen ... Schwarze Stellen im Fruchtfleisch können jedoch Schimmel sein.
Read more

Echte Feige - Gartenwiki - Mein schöner Garten online

Produkt-Test; Händlerverzeichnis. Baumschulen; ... Echte Feige Credits: ... das nur mäßig hell sein muss, ...
Read more

Feige - WEN® Haarpflege-für wunderschönes, gesund ...

Ohne Risiko testen! ... Feige Listenansicht Kachelansicht. Sortieren nach. 2 Artikel . ansehen. pro Seite . WEN® Cleansing Conditioner Feige ...
Read more

Duden | Suchen | feige

... Quiz & Tests; Zitate & Redewendungen; ... Feige; wie eine einzelne ... Ängstlichkeit zögern; aufgrund von Bedenken unentschlossen sein. Zum ...
Read more