Was sind die Unterschiede zwischen BDD-Frameworks für Java? [geschlossen]

121

Welche Vor- und Nachteile hat jedes BDD-Framework ( Behavior Driven Development ) für Java?

Ich habe zum Beispiel einige davon hier gefunden .

Ist es sinnvoll, ein BDD-Framework zu verwenden, wenn ich bereits eine Spottbibliothek (z. B. Mockito ) verwende?

user68109
quelle
Bitte definieren Sie BDD oder Link zur Definition
Jason S
4
BDD = Verhaltensorientierte Entwicklung
Vinnie
4
Zu traurig, dass dies nicht mehr beantwortet wurde!
Pablo Fernandez
für Cuke4Duke lies Gurke-JVM in meinem Kopfgeld. Ich habe noch 22 Stunden Zeit, um das Kopfgeld zu vergeben ...
Sam Hasler

Antworten:

99

Ich habe gerade drei BDD-Frameworks für Java verglichen. Offensichtlich haben meine Ergebnisse ein ziemlich kurzes Verfallsdatum.

Konkordion

  • Sehr flexibel
  • Sehr hübsche Berichtsausgabe
  • Schönes Plugin Framework
  • Schlecht dokumentiert. Ich musste die Quelle lesen, um es herauszufinden (zum Glück ist es extrem gute Qualität).
  • Fixtures schienen eng mit dem HTML verbunden zu sein.

EasyB

  • Sehr flache Lernkurve (auch für Nicht-Groovy-Entwickler)
  • Extrem leistungsstarke DBUnit-Integration
  • Anscheinend keine Unterstützung für Parameter (führt entweder zu sehr vagen Geschichten oder zu Überschneidungen zwischen Text und Code (Bearbeiten: Eigentlich gibt es aber die Dokumentation dafür war sehr gut versteckt).
  • Story und Code sind sehr eng miteinander verbunden (gleiche Datei)
  • Sehr einfache Berichtsausgabe
  • Das IntelliJ-Plugin konnte nicht funktionieren
  • Inaktive Community (Maven-Plugin scheint seit drei Monaten defekt zu sein - es gibt nicht viele Codebeispiele, auf die man zurückgreifen kann)

JBehave

  • Extrem leistungsstark und flexibel (z. B. Reduzierung der Kesselplatte durch Zusammenstellung von Geschichten als Voraussetzung)
  • Umfangreiche (wenn auch fragmentierte) Dokumentation und Beispiele
  • Umfangreiche (wenn auch überwältigende) Unterstützung für verschiedene Frameworks und Umgebungen
  • Hervorragende Trennung von Story-Dateien vom Code
  • Scheint eine ziemlich aktive Community zu haben und viel mehr Beispiele und Diskussionen darüber im Web.
  • Ziemlich steile Lernkurve (ich habe 3-4 mal länger gebraucht, um das herauszufinden als Concordion / EasyB)

Ich hatte nicht die Möglichkeit, Cuke4Duke von JDave so auszuprobieren, wie ich es mir gewünscht hätte, werde aber wahrscheinlich zu diesem Zeitpunkt auf JBehave drängen.

Caoilte
quelle
4
+1: bei weitem die beste Antwort hier. Links hinzufügen.
Haylem
35

"Vor- und Nachteile" können für verschiedene Menschen unterschiedliche Dinge sein. Normalerweise schaue ich mir das an

  • Entwicklungsaktivität , z. B. sind Neuerscheinungen wahrscheinlich oder ist die letzte Veröffentlichung 2 Jahre alt.
  • Reife , zB wie lange es schon gibt, gibt es Tutorials und vielleicht sogar Bücher. (Ich lese diese Bücher nicht, es ist nur ein Zeichen der Adoption.)
  • Tool-Unterstützung , z. B. gibt es ein Eclipse-Plugin, Ant-Unterstützung usw.
  • Größe der Abhängigkeiten , ich mag keine Frameworks, die mit allem für sich kommen. zB möchte ich mein spöttisches Framework selbst wählen.
  • Art der Lizenz , dies ist wichtig für mich aufgrund der rechtlichen Bestimmungen in dem Unternehmen, für das ich arbeite.
  • Kompatibilität mit verwandten Tools , z. B. verwendet es die Gurkensprache oder nicht.

Und von einigen Frameworks habe ich mir das angeschaut

  • Instinkt schlecht : letzte Aktivität März 2010, gut : ASF-Lizenz
  • JDave schlecht : kommt mit Matchern und Mocks, gut : letzte Aktivität Jan 2011, ASF-Lizenz
  • easyb bad : letzte Aktivität Oktober 2010, nicht sicher : es verwendet Groovy. Dies mag in Ordnung sein, wäre aber in meinem Fall ein Problem für die Adoption.
  • Beanspec schlecht : Nur eine Version im Jahr 2007, das ist tot
  • bdoc schlecht : letzte Aktivität Januar 2010, nicht sicher : Es sieht so aus, als würde man in die andere Richtung gehen und einen Bericht aus dem Code erstellen.
  • spock schlecht : vielleicht ein bisschen extrem, dies ist ein komplettes Test-Framework, nicht nur BDD, gut : sehr aktiv, sehr cool.
  • jbehave , die "Mutter" aller BDDs in Java, schlecht : sehr leistungsfähig = komplexe, inkompatible Lizenz (für mich), kommt mit fast jeder Testbibliothek und vielem mehr, gut Testbibliothek und : basierend auf RSpec und daher kompatiblen Eclipse-Plugins, Maven-Integration , sehr aktive Gemeinschaft
  • ginkgo4j , ein BDD-Framework für Java, das ebenfalls auf Rubys RSpec basiert, jedoch Java-Lambdas (anstelle von Anmerkungen) verwendet, um hoch kontextbezogene, gut lesbare Tests zu erstellen. Einfach. Sehr kraftvoll. Open Source Apache 2 Lizenz.

In Bezug auf die Verspottungen: Sie brauchen definitiv auch einen spöttischen Rahmen. Die BDD-Frameworks helfen Ihnen nur beim Schreiben der Spezifikationen, aber einige Tests erfordern Mocks oder Stubs, insb. wenn Sie von oben nach unten entwerfen (von der Übersicht bis zum Detail).

Peter Kofler
quelle
jbehave ist eine 3-Klausel-BSD-Lizenz: jbehave.org/license.html . Ich bin mir nicht sicher, warum jemand damit Probleme haben würde.
Ramon
Ramon, es geht um die Abhängigkeiten. Es gibt viele von ihnen. Vielleicht sind alle Apache oder BSD, ich habe mich nicht darum gekümmert.
Peter Kofler
Gute aktualisierte Liste der BDD-Frameworks behaviour-driven.org/Implementations
Paul Verest
Sie können JGiven zu dieser Liste hinzufügen .
Jan Schaefer
20

Was ist das beste BDD-Framework für Java? Warum? Was sind die Vor- und Nachteile der einzelnen Frameworks?

Hier ist ein interessanter Link zu Concordion vs. Cucumber und Java-basierten Abnahmetests

Ich habe hier einige gefunden, bin mir aber nicht sicher, welche ich wählen soll.

Schauen Sie sich wirklich die oben erwähnte an.

Ist es sinnvoll, ein BDD-Framework zu verwenden, wenn ich bereits eine Spottbibliothek (z. B. Mockito) verwende?

Kurze Antwort: Ja, auf jeden Fall. Tatsächlich sind Akzeptanztests mit einem BDD-Framework und Unit-Tests isoliert mit Scheinobjekten so unterschiedlich, dass ich die Frage nicht wirklich verstehe. Akzeptanztests sind Black-Box-Tests. Tests werden verwendet, um zu überprüfen, ob eine Geschäftsfunktion funktioniert, und werden idealerweise von Geschäftsanalysten geschrieben. Unit-Tests isoliert mit Mocks sind White-Box-Tests. Tests werden verwendet, um zu überprüfen, ob eine Unit funktioniert, und werden von Entwicklern geschrieben. Beide sind nützlich, haben aber völlig unterschiedliche Zwecke. Mit anderen Worten, die Verwendung von Mockito ersetzt überhaupt kein BDD-Framework, und das Gegenteil ist auch der Fall.

Pascal Thivent
quelle
Was Sie gesagt haben, ist nicht falsch, aber das bedeutet nicht, dass Sie Ihre Komponententests nicht in einem BDD-freundlicheren Stil schreiben können. Keine Spezifikation anhand eines Beispiels, aber auch kein wertloses Merkmal. docs.mockito.googlecode.com/hg/org/mockito/BDDMockito.html
cwash
7

Ich habe meine BDD ursprünglich mit einfachem jUnit gemacht, aber ich habe mir JDave angesehen letzter Zeit weil es fast 1: 1 zu dem ist, was ich mit jUnit gemacht habe. Es läuft auch auf jUnit, funktioniert also bereits unter Eclipse und ist einfach zu konfigurieren, um auf kontinuierlichen Integrationssystemen wie Hudson zu arbeiten. Ich kann es nicht wirklich mit anderen vergleichen, aber meine Erfahrungen mit JDave waren bisher gut.

Oh und es ist nie eine dumme Idee, Mocks zu benutzen! Sie sind nicht speziell an TDD / BDD gebunden, sondern sollen die Testlast im Allgemeinen verringern.

Esko
quelle
6

Wow, ich sehe das Thema ist heiß, viele gute Antworten ...

Abgesehen von der Ironie habe ich kürzlich BDD entdeckt und fand das Konzept interessant. Hey, es zwingt dazu, sowohl Tests als auch Spezifikationen zu schreiben! So überraschend es auch scheinen mag, letzteres kann auch in einigen Projekten fehlen ... oder es fehlt einfach die Präzision, die BDD einführen muss.

Der Artikel Behavior Driven Development fasst das Konzept zusammen und enthält Links zu einigen guten Artikeln (wie dem von Andrew Glover). Darüber hinaus enthält das Thema dieses Threads eine ziemlich umfassende (ich nehme an) Auflistung von BDD-Frameworks, von denen eine gute Anzahl für Java bestimmt ist.
Es löst nicht das Problem der Auswahl des Frameworks, erleichtert aber zumindest die Suche ...

Da BDD stark von der Lesbarkeit des Testcodes abhängt, ist es wahrscheinlich ein gutes Auswahlkriterium, sich die Kurztouren / das Tutorial anzusehen und herauszufinden, welches Ihrem Stil am besten entspricht. Andere Kriterien könnten die Tatsache sein, dass ein Framework die Tools nutzt, mit denen Sie vertraut sind (Komponententest, Verspottung), die Verwendung mit IDE usw.

PhiLho
quelle
4

Ich habe Cucumber-JVM (zuvor als Cuke4Duke entwickelt) ausprobiert. Für die Spezifikation wird Gherkin DSL verwendet, das als einfacher Text gespeichert wird.

Gurken-JVM-Beispiel in Eclipse 4.2

Es kann als JUnit-Test ausgeführt werden. Das einzige Problem bei der Verwendung besteht darin, Geschäftsleute oder Produktmanager dazu zu bringen, Funktionen in Quellen zu lesen / schreiben.

Ergebnisse

Paul Verest
quelle
3

Mein Team hat JBehave verwendet seit einiger Zeit. Es werden Nur-Text-Dateien zum Speichern von Spezifikationen verwendet. Jeder Schritt (Gegeben, Wann, Dann) wird dann von einer bestimmten Methode ausgeführt, die Parameter aus dem Schritt extrahieren kann. Szenarien können eingerückt und gut formatiert werden, was sehr hilfreich ist, wenn Clients sie überprüfen möchten.

Es gibt auch einige Probleme. Wir haben auf Java 6 umgestellt. Manchmal werden einige Szenarioschritte während der Ausführung ignoriert. Es kann eine Menge Probleme verursachen, herauszufinden, wo der Fehler liegt.

Boris Pavlović
quelle
2
@Boris Könnte Ihr Problem sein, dass PENDING-Schritte als bestanden (das Standardverhalten) anstatt als fehlgeschlagen gelten? Wenn dies Ihr Problem ist, können Sie die PendingErrorStrategy konfigurieren: jarvana.com/jarvana/view/org/jbehave/jbehave-core/2.2.1/…
JeffH
3

Mein Team hat JBehave mit Erfolg verwendet - wir sind nach der Verwendung von EasyB zu JBehave gewechselt und haben festgestellt, dass die Klartext-Szenariodateien einfacher zu handhaben sind.

Matt Green
quelle