© Excellent backgrounds/Shutterstock.com
Java Magazin
Testing Vaadin - JUnit5, TestBench, Selenoid

Auf Herz und Nieren prüfen

Wenn es darum geht, grafische Oberflächen zu testen, wird es meist ein wenig unhandlich. Oft ist es sogar egal, um welche Technologie es geht. Im Bereich von Webanwendungen hat sich Selenium zum De-facto-Standard hin entwickelt. Im Zusammenhang mit Vaadin allerdings können wir mit TestBench auf ein Werkzeug zurückgreifen, das einiges mehr an Komfort verspricht. Schauen wir uns an, wie wir es zusammen mit JUnit5 anwenden können.

Sven Ruppert


Bei unserem Projekt handelt es sich um eine mit Vaadin realisierte Beispielanwendung, in der wir eine Menge virtueller Personen in einer Liste organisieren beziehungsweise erfassen können. Die Einträge lassen sich editieren und löschen. Um einen neuen Datensatz zu erfassen, erscheint auf Knopfdruck eine Eingabemaske, in der die notwendigen Attribute aufgelistet sind. In der Menge der Datensätze können wir mithilfe eines Eingabefelds suchen. Ziel in der Anwendung ist es nicht, eine ausgefeilte Suche zu implementieren, sondern lediglich die Möglichkeit zu geben, eine variable Menge anhand einer Eingabe darzustellen (Abb. 1).

developer/testbench-jumpstart

Unsere Beispielanwendung ist mehrfach in unterschiedlichen Versionen realisiert. Aus Sicht des Benutzers ist es aber immer dieselbe Anwendung mit demselben UI und derselben Funktionalität. Die teils erheblichen Unterschiede liegen auf der Ebene der Quelltexte in der Art und Weise, wie diese strukturiert und implementiert worden sind. Die Quelltexte sind auf GitHub [1] zu finden.

Abb. 1: Mit Vaadin realisierte Beispielanwendung

Aktuell liegen drei Versionen dieser Anwendung vor. Die erste Version ist sehr kompakt und erinnert eher an ein „Hello World“. Die Implementierung befindet sich im Modul modules/demos/demo01 Die zweite Version ist schon eher wie ein industrielles Projekt strukturiert, hat aber einige Eigenarten, die ich leider immer wieder in Projekten gesehen habe. Diese Implementierung befindet sich in dem Modul modules/demos/demo02. Die Version drei ist sicherlich nicht das Optimum, hat aber dennoch einige Stärken, die ich besonders hervorheben möchte, ohne dass es zu einem rein akademischen Projekt wird. Auch diese Implementierung befindet sich im Repository im Modul modules/demos/demo03.

Die Implementierung

Kommen wir zur Implementierung. Ich werde an dieser Stelle nur die erste Version vollständig vorstellen und mich bei den weiteren Versionen lediglich auf die Differenzen konzentrieren. Wie bei jeder Vaadin-Anwendung benötigen wir zuerst ein Servlet. Hierbei handelt es sich um die simpelste Version. Wer mehr darüber erfahren möchte, dem empfehle ich die Kolumne „Backend meets Frontend“ auf www.jaxenter.de [2].

@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)public static class MyUIServlet extends VaadinServlet {}

Über die Annotation @VaadinServletConfiguration wird durch das Attribut ui=MyUI.class ...

Java Magazin
Testing Vaadin - JUnit5, TestBench, Selenoid

Auf Herz und Nieren prüfen

Wenn es darum geht, grafische Oberflächen zu testen, wird es meist ein wenig unhandlich. Oft ist es sogar egal, um welche Technologie es geht. Im Bereich von Webanwendungen hat sich Selenium zum De-facto-Standard hin entwickelt. Im Zusammenhang mit Vaadin allerdings können wir mit TestBench auf ein Werkzeug zurückgreifen, das einiges mehr an Komfort verspricht. Schauen wir uns an, wie wir es zusammen mit JUnit5 anwenden können.

Sven Ruppert


Bei unserem Projekt handelt es sich um eine mit Vaadin realisierte Beispielanwendung, in der wir eine Menge virtueller Personen in einer Liste organisieren beziehungsweise erfassen können. Die Einträge lassen sich editieren und löschen. Um einen neuen Datensatz zu erfassen, erscheint auf Knopfdruck eine Eingabemaske, in der die notwendigen Attribute aufgelistet sind. In der Menge der Datensätze können wir mithilfe eines Eingabefelds suchen. Ziel in der Anwendung ist es nicht, eine ausgefeilte Suche zu implementieren, sondern lediglich die Möglichkeit zu geben, eine variable Menge anhand einer Eingabe darzustellen (Abb. 1).

developer/testbench-jumpstart

Unsere Beispielanwendung ist mehrfach in unterschiedlichen Versionen realisiert. Aus Sicht des Benutzers ist es aber immer dieselbe Anwendung mit demselben UI und derselben Funktionalität. Die teils erheblichen Unterschiede liegen auf der Ebene der Quelltexte in der Art und Weise, wie diese strukturiert und implementiert worden sind. Die Quelltexte sind auf GitHub [1] zu finden.

Abb. 1: Mit Vaadin realisierte Beispielanwendung

Aktuell liegen drei Versionen dieser Anwendung vor. Die erste Version ist sehr kompakt und erinnert eher an ein „Hello World“. Die Implementierung befindet sich im Modul modules/demos/demo01 Die zweite Version ist schon eher wie ein industrielles Projekt strukturiert, hat aber einige Eigenarten, die ich leider immer wieder in Projekten gesehen habe. Diese Implementierung befindet sich in dem Modul modules/demos/demo02. Die Version drei ist sicherlich nicht das Optimum, hat aber dennoch einige Stärken, die ich besonders hervorheben möchte, ohne dass es zu einem rein akademischen Projekt wird. Auch diese Implementierung befindet sich im Repository im Modul modules/demos/demo03.

Die Implementierung

Kommen wir zur Implementierung. Ich werde an dieser Stelle nur die erste Version vollständig vorstellen und mich bei den weiteren Versionen lediglich auf die Differenzen konzentrieren. Wie bei jeder Vaadin-Anwendung benötigen wir zuerst ein Servlet. Hierbei handelt es sich um die simpelste Version. Wer mehr darüber erfahren möchte, dem empfehle ich die Kolumne „Backend meets Frontend“ auf www.jaxenter.de [2].

@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)public static class MyUIServlet extends VaadinServlet {}

Über die Annotation @VaadinServletConfiguration wird durch das Attribut ui=MyUI.class ...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang