Blog

Concordion ohne den JUnit-Code

Jan Vermeir

Jan Vermeir

Aktualisiert Oktober 22, 2025
3 Minuten

Concordion ist ein Framework zur Unterstützung von Behaviour Driven Design. Es basiert auf JUnit zur Ausführung von Tests und HTML, angereichert mit einer kleinen Concordion-Syntax, um Fixture-Methoden aufzurufen und Aussagen über Testergebnisse zu machen. Ich werde Concordion nicht beschreiben, da es hier gut dokumentiert ist: concordion.org. Stattdessen werde ich eine kleine Hilfsklasse beschreiben, die ich erstellt habe, um Code-Duplizierung zu vermeiden. Concordion erfordert für jeden Test eine JUnit-Klasse. Mit dem Dienstprogramm, das ich im Folgenden beschreibe, können Sie alle Concordion-Tests ausführen, ohne dass Sie für jeden Test eine Dienstprogrammklasse benötigen.

In Concordion geben Sie Testfälle und erwartete Ergebnisse in einer HTML-Datei an. Jede HTML-Datei wird von einer gleichnamigen Java-Klasse begleitet, die die Anmerkung b>@RunWith(ConcordionRunner.class enthält. Diese Java-Klasse ist vergleichbar mit den Fixture-Klassen von Fitnesse. Hier können Sie Methoden erstellen, die in der HTML-Datei verwendet werden, um den Testfall mit dem Geschäftscode zu verbinden. In meinem speziellen Anwendungsfall endete das Team damit, viele meist leere Java-Dateien zu schreiben. Das zu testende System verarbeitete XML-Nachrichtendateien, so dass der Test nur eine einzige Methode aufrufen musste, um das XML an den Geschäftscode zu übergeben und die Ergebnisse zu validieren. Jede Java-Klasse war im Grunde genommen gleich, abgesehen von ihrem Namen.Um diese Duplizierung zu vermeiden, habe ich eine Klasse erstellt, die die JavaAssist-Bibliothek verwendet, um eine Java-Klasse im Handumdrehen zu generieren und sie als JUnit-Test auszuführen. Sie können meinen Code auf Github finden: git clone git@github.com:jvermeir/concordionDemo ConcordionRunner generiert eine Klasse mithilfe einer Vorlage. Die Vorlage kann ganz einfach sein, wie in meinem Beispiel, wo FixtureTemplate MyFixture erweitert. MyFixture enthält den gesamten Fixture-Code, um den Test mit der zu testenden Anwendung zu verbinden. Hier würden wir den gesamten Fixture-Code unterbringen, der für den Aufruf eines Dienstes über eine XML-Nachricht erforderlich ist. In diesem Beispiel gibt es nur die Methode getGreeting(). HelloWorldAgain.html ist der eigentliche Concordion-Test. Er zeigt den Aufruf von getGreeting(), einer Methode von MyFixture. Die Abhängigkeiten sind wie folgt: FixtureTemplate extends MyFixture YourTest.html uses Concordion Example uses ConcordionRunner uses JUnitCore Das Beispiel in Example.java zeigt, wie Sie ConcordionRunner verwenden, um einen Test auszuführen. Dies könnte leicht erweitert werden, um ein Verzeichnis rekursiv zu durchsuchen und alle gefundenen Tests auszuführen. Beachten Sie, dass Example die generierte Klasse in eine Datei schreibt. Dies kann bei der Fehlersuche hilfreich sein, ist aber nicht wirklich notwendig. Nun wäre es schön, das Eclipse-Plugin so anzupassen, dass Sie mit der rechten Maustaste auf die HTML-Datei klicken und sie als Concordion-Test ausführen können, ohne einen Unit-Test hinzuzufügen.

Verfasst von

Jan Vermeir

Developing software and infrastructure in teams, doing whatever it takes to get stable, safe and efficient systems in production.

Contact

Let’s discuss how we can support your journey.