Beliebte Suchanfragen

Cloud Native

DevOps

IT-Security

Agile Methoden

Java

|
//

Verbesserte JBehave Steps mit Varianten

1.4.2012 | 2 Minuten Lesezeit

In einem früheren Post wurde bereits eine kleine Einführung in das JBehave Projekt zur Automatisierung von Akzeptanztests gegeben. Während sich dieser Artikel mit der Installation und der allgemeinen Verwendung des Frameworks beschäftigte, konzentriere ich mich heute auf eine Erweiterung, die ich kürzlich zum Projekt beigesteuert habe, und die es erlaubt, Test Stories in noch natürlicherer Sprache abzufassen, als bislang möglich.

Bisher bei LOST JBehave

Ein kurzer Rückblick: In JBehave werden Tests in Sätzen in natürlicher Sprache verfasst, die zur Ausführungszeit auf korrespondierende Methoden abgebildet werden. Folgendes Beispiel stammt aus der JBehave Dokumentation (übersetzt):

1@When("der Artikelpreis $preis ist")
2@Aliases(values={"der Artikelpreis $preis beträgt"
3             "der Artikelpreis $preis entspricht"}) // mehrere Aliase
4public void derPreisIst(double preis) {
5    // ...
6}

Diese Methode wird aufgerufen, wenn in einer Test-Story eine der folgenden Zeilen steht:

  • Wenn der Artikelpreis 10 ist
  • Wenn der Artikelpreis 10 beträgt
  • Wenn der Artikelpreis 10 entspricht

Die Bereitstellung dieser verschiedenen Formulierungen, die jeweils das identische technische Verhalten auslösen, ist für Tester aus verschiedenen Gründen von großem Vorteil. Zunächst muss sich der Autor der Tests nicht exakt an die genaue Schreibweise eines Testschritts erinnern, um die gewünschte Operation auszulösen. Diesem Problem ließe sich mit besserer Editorunterstützung begegnen, z. B. mit dem JBehave Eclipse Plugin .

Darüber hinaus – und meiner Meinung nach ist dies der wichtigere Aspekt – erlaubt es, Test-Stories zu verfassen, die sowohl einfacher zu lesen, aber auch zu schreiben sind. Eine strikte Beschränkung auf genau eine gültige Formulierung pro Testschritt reißt Testautoren tendenziell aus dem Schreibfluss.

Im oben genannten Beispiel ist die Ähnlichkeit zwischen den drei Alternativen sehr deutlich. Sie beginnen alle mit der gleichen Einleitung, gefolgt von einer Variablen $preis, sowie einem jeweils unterschiedlichen Wort am Ende.

Diese Wiederholung von Text führt zu erheblicher Unordnung im Java Source und ist eine hervorragende Quelle für später schwer zu findende Copy und Paste Fehler.

Neu: jetzt mit noch mehr Varianten

Um dem Wiederholungsproblem zu begegnen, schlug ich den JBehave Autoren eine erste Idee vor und stellte einen Patch bereit, um deren Umsetzbarkeit zu demonstrieren. Nach einer kurzen Diskussion – in deren Verlauf mir die Unzulänglichkeiten meines ersten Ansatzes klar wurden – entstand die Idee einer allgemeineren Muster-Syntax. Die Implementierung derselben habe ich als Patch zur Verfügung gestellt, und sie wird Teil des 3.6er Releases sein. Sie erlaubt das oben genannte Beispiel wie folgt zu vereinfachen:

1@When("der Artikelpreis $preis {ist|beträgt|entspricht}")
2public void derPreisIst(double preis) {
3    // ...
4}

Der Wert der @When Annotation enthält nun ein paar geschweifter Klammern, das mehrere an dieser Stelle zulässige Worte einschließt. Intern erzeugt JBehave alle Permutationen, die sich durch diese Option ergeben und behandelt sie gleichwertig, so als wären sie explizit ausformuliert. Natürlich ist diese Syntax auch in “normalen” @Alias Deklarationen möglich.

Es ist durchaus möglich, mehr als einen dieser Blöcke mit Optionen in einer Schritt-Definition mit @Given, @When oder @Then zu verwenden. Hier ein etwas komplexeres Beispiel:

1@Then("{Muss|Sollte|Soll} A $x sein, {außer|es sei denn} es ist {Teil von|enthalten in} {der |}Liste $y")
|

Beitrag teilen

Gefällt mir

0

//

Weitere Artikel in diesem Themenbereich

Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.

//

Gemeinsam bessere Projekte umsetzen.

Wir helfen deinem Unternehmen.

Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.

Hilf uns, noch besser zu werden.

Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.