2011-01-14 6 views
5

Ich möchte nur sicherstellen, dass ich die Dinge verstehe.Ist Cucumber einfach ein Wrapper um rspec, um Tests in Features zu organisieren?

Von was ich bisher erfasse, ist Cucumber einfach ein "Wrapper" oder eine nette Art, um Ihre Tests zu organisieren, indem Sie Dinge in Funktionen und Schritte kategorisieren, wo die eigentlichen Komponententests in der Schrittphase sind.

Es ermöglicht, Ihre Tests zu organisieren, wie die Dinge funktionieren.

Ist das korrekt?

Antwort

6

Sortieren von.

Es ist eine Möglichkeit, Tests zu organisieren, aber es ist mehr als das. Es verhält sich wie die originalen Rails-Integrationstests, ist aber viel einfacher zu benutzen. Der große Gewinn hier ist, dass Ihre Sitzung transparent über die gesamte Scenario gehalten wird.

Eine andere Sache, die mit Gurke passiert, ist, dass Sie aus der Sicht eines Browsers oder Clients mit Ihrem Code testen sollen. Wenn Sie möchten, können Sie Schritte verwenden, um Objekte zu erstellen und den Status einzurichten, aber normalerweise möchten Sie, dass Ihre Schritte die Bewegungen durchlaufen, die erforderlich sind, um diesen Status überhaupt zu erreichen.

Zum Beispiel Sie könnte dies tun:

Given /I have a user account/ do 
    @user = Factory.create(:user) 
    # ... more user set up 
end 

Aber man sollte wohl so etwas tun, statt:

Given /I have a user account/ do 
    visit new_user_url 
    fill_in "user_login", :with => "some name" 
    fill_in "user_password", :with => "foo" 
    # ... whatever else your sign up page needs 
end 

Und natürlich können Sie in Argumente zu einem dieser Schritte passieren Geben Sie Ihrem Anrufcode eine feinere Kontrolle über das Verhalten des Schritts.

Was ich im Allgemeinen mit meinen Tests gemacht habe, ist wie folgt.

  1. Ich benutze shofa, aber rspec ist auch in Ordnung.
  2. Ich schreibe meine Negativ-Auth-Tests (d. H. Zugriff verweigert wird erwartet) als Rails-Funktionstests.
  3. Ich schreibe meine Positiv-Auth-Tests (d. H. Benutzer, die tun, was sie tun sollen) als Gurken-Features.

Und natürlich habe ich noch Rails Unit-Tests für meine Modelle, Bibliotheken, Helfer usw.

+2

Ich stimme nicht zu, dass das "sollte" Beispiel ist besser als das "könnte" Beispiel. Der allgemeine Konsens ist, dass es völlig in Ordnung ist, Fabriken in vorgegebenen Schritten zu verwenden, um Vorbedingungen für das zu schaffen, was tatsächlich in Schritten getestet wird. –

+0

Sicher. Ich benutze auch Fabriken in einigen meiner Schritte. Es ist ein angemessenes Maß an Subjektivität beteiligt. Ich habe versucht, auf den allgemeinen Zweck von Cucumber hinzuweisen (das Fahren Ihrer Software als Benutzer). Ich habe nicht versucht, einen einzigen Weg zu beschreiben, alle Schritte zu schreiben. – jdl

2

Ich mag Gurken schreiben, weil es was beschreibt das Verhalten ohne beschreibt, ist wie es ist implementiert. Gurke entkoppelt grundsätzlich die Spezifikation (die auch ein ausführbarer Akzeptanz-/Regressionstest ist) von der Implementierung. Die Schrittdefinitionen sind der Adapter zwischen der Spezifikation und dem zu testenden System, der die Entkopplung ermöglicht.

Sie können auch argumentieren, dass Cucumber Ihnen eine besser lesbare Spezifikation gibt als RSpec oder andere Ruby-basierte Syntaxen, die von einem Nicht-Programmierer-Client verstanden (sogar geschrieben) werden können.

1

Ich würde sagen, Sie verstehen inkorrekt.

Unit-Test und Gurken-Schritte sind völlig verschiedene und weitgehend unabhängige Dinge.

Gurkentests sind Kombination Integration/Benutzerakzeptanztests und als solche sollen von der tatsächlichen Implementierung in Code unabhängig sein. Theoretisch könnten Sie Ihre App in einer anderen Sprache komplett neu schreiben und Ihre Gurkentests und möglicherweise auch Schritte wären immer noch nützlich, vorausgesetzt, Sie haben das Verhalten Ihrer Anwendung nicht geändert. Unit-Tests hingegen sind eng mit dem Code verbunden und testen Dinge wie Rückgabewerte bestimmter Methodenaufrufe, Edge-Cases in Bezug auf Datenstrukturen usw. Ändern Sie eine Methode, und Sie müssen den Komponententest ändern.

Es gibt einige gute Screencasts, die über die Verwendung von Cucumber und RSpec zum Erstellen/Testen Ihrer App von außen sprechen. Hier sind einige, die Sie Ihr Verständnis zu verbessern, den Einstieg erleichtern sollen, wie Integrationstests und Unit-Tests zusammen passen können:

http://blog.josephwilk.net/ruby/outside-in-development-with-cucumber-and-rspec.html

http://rubyconf2008.confreaks.com/rspec-and-cucumber.html

http://confreaks.net/videos/72-mwrc2009-bdd-with-cucumber

Meine eigenen persönlichen Gebrauch von Gurke ist ein Ein bisschen ketzerisch, da ich in kleineren Projekten oft nur Gurke benutze, da es die Monotonie laufender und neu startender Skripte ersetzt, die einfach nicht wichtig genug sind, um eine vollständige Test-Entwicklung zu starten. Dies ist jedoch definitiv nicht der Community-Konsens (zumindest in der Öffentlichkeit), wie man etwas macht.

0

Gurke ist kein Wrapper um RSpec. RSpec ist ein Tool, mit dem Sie Code auf einer Ebene der Einheit (eine Klasse zu einer Zeit) fahren können, während Gurke ein Werkzeug ist, um Merkmale Ihres Systems zu definieren, die wiederum automatisiert sind.

RSpec-Spezifikationen werden in der Regel bei der Entwicklung der Codebasis einzeln geschrieben. Wir spezifizieren das nächste kleine Verhalten der Klasse, die wir gerade schreiben.

Vergleichen Sie das mit Gurke, wo wir eine Reihe von Szenarien schreiben, die nichts anderes als ein Beispiel dafür sind, wie das System von einem Endbenutzer verwendet wird. In der Regel werden die meisten Szenarien vor Beginn der Entwicklung geschrieben, und sie dienen dazu, zu definieren, welche Funktionalität das Feature enthalten soll. In einer agilen Umgebung gilt ein Feature als funktional abgeschlossen, wenn alle Szenarien erfolgreich sind.

In kleineren Läden schreiben die Entwickler sowohl die Cucumber Features/Scenarios als auch die RSpec Specs. In größeren Shops werden diese Aktivitäten zwischen Entwicklern aufgeteilt, die die Spezifikationen schreiben, während die Produkteigentümer und Tester die Szenarien schreiben und automatisieren.

Verwandte Themen