JUnit-Testing von JEE-Anwendungen in einem embedded EJB-Containers
Troisdorf, 06.03.2015, Jewgenij Moldawski
Insert Client/Partner logo
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 %
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.
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.
5JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx
Lösung
Copyright © Capgemini 2012. All Rights Reserved
Modifikation der Testumgebung
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
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
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
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“ .
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.
11JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx
Demo?
Copyright © Capgemini 2012. All Rights Reserved
Demo?
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.
13JUnit-Testing einer JEE-Anwendung in einem embedded EJB-Containers.pptx
Danke!
Copyright © Capgemini 2012. All Rights Reserved
Danke fürs Zuhören!Fragen?
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.