Gradle im Praxistest - Teil 2

Schaukeln für Profis

Moritz Zimmer, Marek Iwaszkiewicz


Im zweiten Artikel demonstrieren wir weiterhin praxisnah anhand unserer Beispielanwendung [1] zuerst die Realisierung der Testautomatisierung. Neben der Umsetzung der wichtigen Integrationstests beschreiben wir auch, wie mit Gradle [2] im Rahmen der Testausführung Aspekte wie Testabdeckung sowie die Ermittlung der statischen Codequalität umgesetzt werden können und hierbei von Mechanismen wie der Testparallelisierung Gebrauch gemacht werden kann. Anschließend werfen wir einen Blick auf die Anbindung von Continuous-Integration-Systemen und demonstrieren abschließend die Erstellung umgebungsspezifischer Konfigurationen.

ArtikelserieTeil 1: Projektbeschreibung, Entwicklungsumgebung, Anwendungs­entwicklungTeil 2: Qualitätssicherung, CI, umgebungsspezifische Konfiguration

Testautomatisierung

Testautomatisierung ist von zentraler Bedeutung für die Sicherstellung der Qualität der entwickelten Software und muss daher auch von jedem Build-System entsprechend unterstützt werden. Was zunächst nach einer einfachen Anforderung klingt, stellt sich bei genauerer Betrachtung als anspruchsvoll heraus. So geht es bei der Testautomatisierung um mehr als nur die einfache Ausführung von Unit Tests. Um eine möglichst optimale Testumgebung zu erhalten, sollte das eingesetzte Build-System zum Beispiel auch die Möglichkeit zur Ausführung von Integrationstests bieten. Idealerweise sollte die Möglichkeit bestehen, einfache Unit Tests und Integrationstests voneinander zu trennen – sowohl in der Ausführung als auch im Bereich des Sourcecodes. Gradle bietet hier für beide Punkte eine Lösung. Zum einen können auf einfache Art und Weise über Source-Sets für alle Projekte Ordner für den Sourcecode und Ressourcen von Integrationstests erstellt werden. In Listing 1 definieren wir für alle Projekte das Source-Set integrationTest. Um eine von Unit Tests losgelöste Ausführung zu erlangen, implementieren wir die gleichnamige Gradle-Task integrationTest vom Typ Test, in der wir angeben, dass nur die Testklassen aus dem eben definierten Source-Set berücksichtigt werden. Die Ausführung der Integrationstests erfolgt mit folgendem Befehl:

$ gradlew integrationTest

Mit dem Ausdruck check.dependsOn integrationTest in Listing 1 wird dafür gesorgt, dass die Integrationstests auch bei Ausführung der Check-Tasks angestoßen werden.

Listing 1 sourceSets { integrationTest {} }  task integrationTest(type: Test, dependsOn: jar) { testClassesDir = sourceSets.integrationTest.output.classesDir  classp...

Gradle im Praxistest - Teil 2

Schaukeln für Profis

Moritz Zimmer, Marek Iwaszkiewicz


Im zweiten Artikel demonstrieren wir weiterhin praxisnah anhand unserer Beispielanwendung [1] zuerst die Realisierung der Testautomatisierung. Neben der Umsetzung der wichtigen Integrationstests beschreiben wir auch, wie mit Gradle [2] im Rahmen der Testausführung Aspekte wie Testabdeckung sowie die Ermittlung der statischen Codequalität umgesetzt werden können und hierbei von Mechanismen wie der Testparallelisierung Gebrauch gemacht werden kann. Anschließend werfen wir einen Blick auf die Anbindung von Continuous-Integration-Systemen und demonstrieren abschließend die Erstellung umgebungsspezifischer Konfigurationen.

ArtikelserieTeil 1: Projektbeschreibung, Entwicklungsumgebung, Anwendungs­entwicklungTeil 2: Qualitätssicherung, CI, umgebungsspezifische Konfiguration

Testautomatisierung

Testautomatisierung ist von zentraler Bedeutung für die Sicherstellung der Qualität der entwickelten Software und muss daher auch von jedem Build-System entsprechend unterstützt werden. Was zunächst nach einer einfachen Anforderung klingt, stellt sich bei genauerer Betrachtung als anspruchsvoll heraus. So geht es bei der Testautomatisierung um mehr als nur die einfache Ausführung von Unit Tests. Um eine möglichst optimale Testumgebung zu erhalten, sollte das eingesetzte Build-System zum Beispiel auch die Möglichkeit zur Ausführung von Integrationstests bieten. Idealerweise sollte die Möglichkeit bestehen, einfache Unit Tests und Integrationstests voneinander zu trennen – sowohl in der Ausführung als auch im Bereich des Sourcecodes. Gradle bietet hier für beide Punkte eine Lösung. Zum einen können auf einfache Art und Weise über Source-Sets für alle Projekte Ordner für den Sourcecode und Ressourcen von Integrationstests erstellt werden. In Listing 1 definieren wir für alle Projekte das Source-Set integrationTest. Um eine von Unit Tests losgelöste Ausführung zu erlangen, implementieren wir die gleichnamige Gradle-Task integrationTest vom Typ Test, in der wir angeben, dass nur die Testklassen aus dem eben definierten Source-Set berücksichtigt werden. Die Ausführung der Integrationstests erfolgt mit folgendem Befehl:

$ gradlew integrationTest

Mit dem Ausdruck check.dependsOn integrationTest in Listing 1 wird dafür gesorgt, dass die Integrationstests auch bei Ausführung der Check-Tasks angestoßen werden.

Listing 1 sourceSets { integrationTest {} }  task integrationTest(type: Test, dependsOn: jar) { testClassesDir = sourceSets.integrationTest.output.classesDir  classp...

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