A power workshop during JAX 2007 on advanced techniques of test-driven development. It deals with acceptance tests using FIT as well as with mock objects, GUI testing and Groovy as a testing language for Java.
JSF-Anwendungen testen mit
Arquillian Drone und Arquillian WARP
Arquillian ermöglicht "In-Container"-Tests. Will man JSF-Anwendungen
testen, genügt dies nicht, da ja auch Client-seitige Eingaben und Prüfungen
benötigt werden.
Das Arquillian-Projekt Drone verwendet Selenium, um Client-Eingaben
und Prüfungen zu realisieren. Mit den üblichen Arquillian-Möglichkeiten
hat man damit sowohl den Client als auch den Container im Zugriff.
Das Arquillian-Projekt WARP ermöglicht ebenfalls Client- als auch
Server-seitigen Zugriff. Es befindet sich gerade in der Inkubationsphase
als Arquillian-Teilprojekt. Obwohl noch nicht vollständig, erscheint
ein Blick in die aktuellen Möglichkeiten sinnvoll.
Im Rahmen der Developer Konferenz des Internet-Briefing zeige ich Last- und Performancetests mit Proxy Sniffer (http://www.proxy-sniffer.com/).
Die Präsentation dient dabei als Einleitung und Begleitung. Die Demo ist hier kurz zusammengefasst: http://www.youtube.com/watch?v=kP7ZxGTBync
A power workshop during JAX 2007 on advanced techniques of test-driven development. It deals with acceptance tests using FIT as well as with mock objects, GUI testing and Groovy as a testing language for Java.
JSF-Anwendungen testen mit
Arquillian Drone und Arquillian WARP
Arquillian ermöglicht "In-Container"-Tests. Will man JSF-Anwendungen
testen, genügt dies nicht, da ja auch Client-seitige Eingaben und Prüfungen
benötigt werden.
Das Arquillian-Projekt Drone verwendet Selenium, um Client-Eingaben
und Prüfungen zu realisieren. Mit den üblichen Arquillian-Möglichkeiten
hat man damit sowohl den Client als auch den Container im Zugriff.
Das Arquillian-Projekt WARP ermöglicht ebenfalls Client- als auch
Server-seitigen Zugriff. Es befindet sich gerade in der Inkubationsphase
als Arquillian-Teilprojekt. Obwohl noch nicht vollständig, erscheint
ein Blick in die aktuellen Möglichkeiten sinnvoll.
Im Rahmen der Developer Konferenz des Internet-Briefing zeige ich Last- und Performancetests mit Proxy Sniffer (http://www.proxy-sniffer.com/).
Die Präsentation dient dabei als Einleitung und Begleitung. Die Demo ist hier kurz zusammengefasst: http://www.youtube.com/watch?v=kP7ZxGTBync
Testgetriebene Entwicklung mit Jasmine und Karma hat sich mittlerweile schon als defacto-Standard etabliert. Routinen ohne Abhängigkeiten lassen sich damit ohne Probleme testen. Die Schwierigkeiten beginnen jedoch schon, wenn es um die Auflösung von Abhängigkeiten geht. In diesem Vortrag werden verschiedene Strategien und Werkzeuge vorgestellt, mit denen Abhängigkeiten zu Objekten und Funktionen oder zum Server abgedeckt werden können. Aber nicht nur Abhängigkeiten stellen Schwierigkeiten bei der testgetriebenen Entwicklung dar, auch der Umgang mit Fixtures ist bei der testgetriebenen Entwicklung mit JavaScript relevant. Abgerundet wird dieser Vortrag mit einigen Best Practices für die testgetriebenen Entwicklung mit JavaScript.
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...Marc Müller
Mittlerweile haben sich im VS-Umfeld immer mehr Nicht-MSTest-Testframeworks etabliert. Im Vortrag wollen wir auf mögliche Alternativen zu MSTest und Coded UI eingehen (z. B. Selenium, Ranorex, Protractor, …). Es geht dabei um Vor-/Nachteile, sinnvolle Szenarien und wie man es geschickt in die TFS-Werkzeugwelt integriert. Das Ziel ist dabei, das Beste aus beiden Welten zu bekommen.
Die 2016 gegründete und inzwischen in der Eclipse Foundation beheimatete Initiative MicroProfile ist angetreten, die Lücke zwischen dem Enterprise-Java-Standard (Java EE aka EE4J) und den Praxisanforderungen Microservices-basierter Architekturen zu schließen. Das bestehende Momentum der JEE-Community als Hebel nutzen und organisch um den Bedarf der Microservices-Community ergänzen, so der Plan. Und dieser Plan scheint aufzugehen. In nur wenigen Monaten ist es gelungen, eine Reihe sinnvoller Microservices-relevanter APIs mit bestehenden Java-EE-7/8-APIs zu kombinieren und diese in regelmäßigen MicroProfile-Releases zu veröffentlichen. Egal ob Health Check, Metrics, Fault Tolerance, JWT Propagation, Configuration, Tracing oder Open API, MicroProfile scheint die richtigen Antworten – sprich APIs – im Gepäck zu haben. Die Session zeigt den aktuellen Stand von MicroProfile und demonstriert dessen Mehrwert anhand praktischer Beispiele.
.NET 5 klopft nicht mehr nur leicht an die Tür, es trommelt vielmehr in ohrenbetäubender Lautstärke. Seit Microsoft angekündigt hat, dass das klassische .NET zukünftig nicht mehr unterstützt wird, stellt sich kaum noch die Frage ob, sondern nur noch wann, eine Migration notwendig wird.
In dieser Dev Session betrachten wir deshalb zunächst was es mit den verschiedenen .NET Versionen auf sich hat und wie sich diese über die Jahre entwickelt haben. Anschließend migrieren wir eine WPF Anwendung und betrachten hierbei das Vorgehen, sowie die damit verbundenen Herausforderungen. Dabei gehen wir auch auf die Zukunft von so wichtigen Bestandteilen wie Entity Framework und Windows Communication Foundation ein. Abschließend behandeln wir Migrationsszenarien bei denen nicht die gesamte, sondern nur Teile von Anwendungen migriert werden und erläutern die damit verbundenen Migrationsstrategien beispielhaft.
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
Kurzbeschreibung
Softwarequalität ist keine Spracheigenschaft. In jeder noch so guten Programmiersprache kann man schlechte Programme schreiben – sogar in Java. Herr Seekamp, Senior Consultant bei der GEDOPLAN GmbH, macht in diesem Vortrag anhand von Fallbeispielen aus seinen Projekten deutlich, was verständlichen und wartbaren Code ausmacht, welche Regeln man dafür beherzigen sollte und welche Analysewerkzeuge dabei unterstützen können.
Inhalt
Regeln für guten Java-Code
Statische Code-Analyse
Refactoring
Werkzeuge zur Sicherung der Qualität
Softwarequalitätssicherung mit Continuous Integration ToolsGFU Cyrus AG
Kurzbeschreibung
Automatische Softwaretests rücken immer mehr in den Mittelpunkt. Gerade die derzeit vielfach eingesetzten agilen Vorgehensweisen benötigen ein teamübergreifendes und reproduzierbares Verfahren zur Sicherung der Softwarequalität. In diesem Vortrag legt Dirk Weil, Geschäftsführer der GEDOPLAN GmbH aus Bielefeld, das Augenmerk auf die Werkzeuge, die in Java-Projekten zum fortlaufenden Build und Test von Software genutzt werden können. Anhand einiger Praxisbeispiele zeigt er den Aufbau und Betrieb einer Continuous-Integration-Umgebung, die GEDOPALN für Softwareprojekte betreibt. Dozent: Dirk Weil, Gedoplan
Inhalt
- Grundlagen und Motivation automatischer Softwaretests
- Testziele und Verfahren (Unit-Tests, Regressionstests, Akzeptanztests etc.)
- Build- und Testautomatisierung
- Beispielumgebung auf Basis von Ant, Maven, Subversion und Hudson
- Code-Analyse
- Extreme Feedback
End-To-End Tests in Webapplikationen können in ihrer Umsetzung komplex werden und führen schnell zu unwartbarem und fragilem Code. Der Page-Object Pattern gibt eine Möglichkeit den Code besser zu organisieren und den Spaß in automatisierte Tests zurück zu bringen.
In diesem Talk zeigt Khairi, wie das Page-Object Pattern effizient auch in funktionalen Tests umgesetzt werden kann.
Code zum Vortrag: https://github.com/mozzymoz/e2eTests
Testgetriebene Entwicklung mit Jasmine und Karma hat sich mittlerweile schon als defacto-Standard etabliert. Routinen ohne Abhängigkeiten lassen sich damit ohne Probleme testen. Die Schwierigkeiten beginnen jedoch schon, wenn es um die Auflösung von Abhängigkeiten geht. In diesem Vortrag werden verschiedene Strategien und Werkzeuge vorgestellt, mit denen Abhängigkeiten zu Objekten und Funktionen oder zum Server abgedeckt werden können. Aber nicht nur Abhängigkeiten stellen Schwierigkeiten bei der testgetriebenen Entwicklung dar, auch der Umgang mit Fixtures ist bei der testgetriebenen Entwicklung mit JavaScript relevant. Abgerundet wird dieser Vortrag mit einigen Best Practices für die testgetriebenen Entwicklung mit JavaScript.
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...Marc Müller
Mittlerweile haben sich im VS-Umfeld immer mehr Nicht-MSTest-Testframeworks etabliert. Im Vortrag wollen wir auf mögliche Alternativen zu MSTest und Coded UI eingehen (z. B. Selenium, Ranorex, Protractor, …). Es geht dabei um Vor-/Nachteile, sinnvolle Szenarien und wie man es geschickt in die TFS-Werkzeugwelt integriert. Das Ziel ist dabei, das Beste aus beiden Welten zu bekommen.
Die 2016 gegründete und inzwischen in der Eclipse Foundation beheimatete Initiative MicroProfile ist angetreten, die Lücke zwischen dem Enterprise-Java-Standard (Java EE aka EE4J) und den Praxisanforderungen Microservices-basierter Architekturen zu schließen. Das bestehende Momentum der JEE-Community als Hebel nutzen und organisch um den Bedarf der Microservices-Community ergänzen, so der Plan. Und dieser Plan scheint aufzugehen. In nur wenigen Monaten ist es gelungen, eine Reihe sinnvoller Microservices-relevanter APIs mit bestehenden Java-EE-7/8-APIs zu kombinieren und diese in regelmäßigen MicroProfile-Releases zu veröffentlichen. Egal ob Health Check, Metrics, Fault Tolerance, JWT Propagation, Configuration, Tracing oder Open API, MicroProfile scheint die richtigen Antworten – sprich APIs – im Gepäck zu haben. Die Session zeigt den aktuellen Stand von MicroProfile und demonstriert dessen Mehrwert anhand praktischer Beispiele.
.NET 5 klopft nicht mehr nur leicht an die Tür, es trommelt vielmehr in ohrenbetäubender Lautstärke. Seit Microsoft angekündigt hat, dass das klassische .NET zukünftig nicht mehr unterstützt wird, stellt sich kaum noch die Frage ob, sondern nur noch wann, eine Migration notwendig wird.
In dieser Dev Session betrachten wir deshalb zunächst was es mit den verschiedenen .NET Versionen auf sich hat und wie sich diese über die Jahre entwickelt haben. Anschließend migrieren wir eine WPF Anwendung und betrachten hierbei das Vorgehen, sowie die damit verbundenen Herausforderungen. Dabei gehen wir auch auf die Zukunft von so wichtigen Bestandteilen wie Entity Framework und Windows Communication Foundation ein. Abschließend behandeln wir Migrationsszenarien bei denen nicht die gesamte, sondern nur Teile von Anwendungen migriert werden und erläutern die damit verbundenen Migrationsstrategien beispielhaft.
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
Kurzbeschreibung
Softwarequalität ist keine Spracheigenschaft. In jeder noch so guten Programmiersprache kann man schlechte Programme schreiben – sogar in Java. Herr Seekamp, Senior Consultant bei der GEDOPLAN GmbH, macht in diesem Vortrag anhand von Fallbeispielen aus seinen Projekten deutlich, was verständlichen und wartbaren Code ausmacht, welche Regeln man dafür beherzigen sollte und welche Analysewerkzeuge dabei unterstützen können.
Inhalt
Regeln für guten Java-Code
Statische Code-Analyse
Refactoring
Werkzeuge zur Sicherung der Qualität
Softwarequalitätssicherung mit Continuous Integration ToolsGFU Cyrus AG
Kurzbeschreibung
Automatische Softwaretests rücken immer mehr in den Mittelpunkt. Gerade die derzeit vielfach eingesetzten agilen Vorgehensweisen benötigen ein teamübergreifendes und reproduzierbares Verfahren zur Sicherung der Softwarequalität. In diesem Vortrag legt Dirk Weil, Geschäftsführer der GEDOPLAN GmbH aus Bielefeld, das Augenmerk auf die Werkzeuge, die in Java-Projekten zum fortlaufenden Build und Test von Software genutzt werden können. Anhand einiger Praxisbeispiele zeigt er den Aufbau und Betrieb einer Continuous-Integration-Umgebung, die GEDOPALN für Softwareprojekte betreibt. Dozent: Dirk Weil, Gedoplan
Inhalt
- Grundlagen und Motivation automatischer Softwaretests
- Testziele und Verfahren (Unit-Tests, Regressionstests, Akzeptanztests etc.)
- Build- und Testautomatisierung
- Beispielumgebung auf Basis von Ant, Maven, Subversion und Hudson
- Code-Analyse
- Extreme Feedback
End-To-End Tests in Webapplikationen können in ihrer Umsetzung komplex werden und führen schnell zu unwartbarem und fragilem Code. Der Page-Object Pattern gibt eine Möglichkeit den Code besser zu organisieren und den Spaß in automatisierte Tests zurück zu bringen.
In diesem Talk zeigt Khairi, wie das Page-Object Pattern effizient auch in funktionalen Tests umgesetzt werden kann.
Code zum Vortrag: https://github.com/mozzymoz/e2eTests
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.
2
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
5
7. Unit Test
Test: Umrechnung in WaehrungService
Mock für WaehrungRepository
Toolset: JUnit, Mockito
WaehrungService
Waehrung
WaehrungRepository
Feige sein!
7
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
8
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!
9
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!
11
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!
12
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!
13
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!
16
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!
17
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!
19
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!
20
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!
21
22. Drone
Arquillian-Erweiterung für Selenium
Browser-Fernsteuerung
Drone übernimmt Lifecycle-Steuerung des dazu nötigen
Selenium-Servers
@Drone injiziert WebDriver (=Fernsteuerung)
Browser wählbar via arquillian.xml
Firefox, Crome, IE, HtmlUnit, PhantomJS, …
häufig per Maven-Profil
Feige sein!
22
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!
25