JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

14
JUnit-Testing von JEE- Anwendungen in einem embedded EJB-Containers Troisdorf, 06.03.2015, Jewgenij Moldawski Insert Client/Partner logo

Transcript of JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

Page 1: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

JUnit-Testing von JEE-Anwendungen in einem embedded EJB-Containers

Troisdorf, 06.03.2015, Jewgenij Moldawski

Insert Client/Partner logo

Page 2: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

2JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx

Eine Anwendung soll re-designed werden...

Copyright © Capgemini 2012. All Rights Reserved

… und hat eine Unit-Test Abdeckung von 0 %

Page 3: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

3JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx

Anforderungen an JUnit-Testing

Copyright © Capgemini 2012. All Rights Reserved

• Keine Umstellung für Entwickler: deswegen keine neue Tools oder Framworks (z. B. Mockito)

• Alle Arten der Moldulen müssen getestet werden können: JPAs, EJBs, JSF-Backing Beans

• JUnit-Tests müssen sowohl bei den Entwicklern als auch auf einem PU-Server mit sehr beschränkten Admin-Möglichkeiten lauffähig sein. Es dürfen ausschließlich lokale Resourcen genutzt werden: keine zentralen DB, Appserver usw.

• Möglichst wenig Aufwand betreiben.

Page 4: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

4JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx

Folgen

Copyright © Capgemini 2012. All Rights Reserved

• Kein reiner Unit-Test, sondern ein integrativer: die Module werden zwar einzeln getestet, sie bleiben währenddessen genauso verknüpft, wie in Produktion.

• Der Test erfolgt in einem embedded EJB-Container mit einer ebenso embeddend Datenbank.

• Das Datenbankschema wird vom JPA-Provider (in unserem Fall Hibernate) aufgrund der JPA-Klassen vor jeder Testserie automatisch neu angelegt.

• Die Unterschiede zwischen den produktiven und JUnit-Umgebungen werden in Kauf genommen.

Page 5: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

5JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx

Lösung

Copyright © Capgemini 2012. All Rights Reserved

Modifikation der Testumgebung

Page 6: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

6JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx

Vergleich Produktion und Junit-Testumgebung

Copyright © Capgemini 2012. All Rights Reserved

Container/Provider Produktion Test

EJB IBM Websphere Apache OpenEJB

JSF MyFaces MyFaces

JPA Hibernate Hibernate

CDI IBM Websphere Apache OpenWebBeans

CMP IBM Websphere Apache OpenEJB

DB IBM DB2 Apache Derby DB

JMS Websphere MQ Active MQ

JVM IBM Java IBM Java

Page 7: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

7JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx

Vergleich Produktion und Junit-Testumgebung

Copyright © Capgemini 2012. All Rights Reserved

Diese Unterschiede in der Umgebung verringern die Aussagekraft der JUnit-Tests ein wenig. Andererseits helfen die Tests auf einer abgewandeltenPlattform mache Fehler zu finden, die auf der produktiven Plattform nicht auffallen.

Abdeckung, %

Qualitätsaussage

100

Originalumgebung

Junittest-Plattformg

Page 8: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

8JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx

Glue- und Service -Code

Copyright © Capgemini 2012. All Rights Reserved

• Konfiguriert und startet den Embedded-Container zu Begin einer Testserie. Dabei werden alle EJBs und JPAs aus dem Classpath des zu testenden Moduls deployed und eine JTA-Datenquelle konfiguriert.

• startet neue Transaktion und neuenJSF-Context für jeden neuen Test

• bietet Wrap-Methoden für Transaktionsklammerung und fürs Setzten der JEE-Security-Rollen

• stellt die JDBC-Connection für direkte Eingriffe in die DB aus den Tests bereit

Page 9: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

9JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx

Integration

Copyright © Capgemini 2012. All Rights Reserved

• Das zu Testende Projekt muss nur eine Maven-Dependency zum Service-Modul junithelper herstellen:

<dependency><groupId>com.capgemini.cgn</groupId><artifactId>junithelper</artifactId><version>1.0</version><scope>provided</scope>

</dependency>

• Alle weiteren notwendigen Libraries werden dann automatisch per Maven geladen, vorausgesetzt die Maven-Installation hat Verbindung zum populären Maven-Repository „Central“ .

Page 10: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

10JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx

Testdaten

Copyright © Capgemini 2012. All Rights Reserved

• Das Modul junithelper legt automatisch ein DB-Schema vor jeder Testserie an, das den JPA-Entitäten entspricht (JPA auto create schema)

• Für die Daten in den Tabellen sind die Junit-Tests selber zuständig.

Page 11: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

11JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx

Demo?

Copyright © Capgemini 2012. All Rights Reserved

Demo?

Page 12: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

12JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx

Angebot

Copyright © Capgemini 2012. All Rights Reserved

• Das Service-Modul junithelper kann bei mir auf Anfrage bezogen werden.

• Falls Sie es ausprobieren möchten, könnte ich ein wenig Starthilfe leisten.

Page 13: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

13JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx

Danke!

Copyright © Capgemini 2012. All Rights Reserved

Danke fürs Zuhören!Fragen?

Page 14: JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Container

www.capgemini.com

About CapgeminiWith more than 120,000 people in 40 countries, Capgemini is one of the world's foremost providers of consulting, technology and outsourcing services. The Group reported 2011 global revenues of EUR 9.7 billion.Together with its clients, Capgemini creates and delivers business and technology solutions that fit their needs and drive the results they want. A deeply multicultural organization, Capgemini has developed its own way of working, the Collaborative Business ExperienceTM, and draws on Rightshore ®, its worldwide delivery model.

Rightshore® is a trademark belonging to Capgemini

The information contained in this presentation is proprietary.Copyright © 2012 Capgemini. All rights reserved.