Was ist der Unterschied zwischen RSpec und Cucumber? [geschlossen]

114

Ich habe 6 Monate Erfahrung in der Entwicklung von Rails. Ich habe eine Webanwendung erstellt, die jetzt mit Authentifizierung und Autorisierung und postgresql db verwendet wird.

Ich gehe zu meiner zweiten Rails-Anwendung über, aber dieses Mal möchte ich sie nach den gewonnenen Erkenntnissen mit TDD entwickeln, da mir aufgefallen ist, dass es viel einfacher ist, sie zu skalieren und Fehler zu beheben. Es entwickelt sich nur langsam, ist aber auf lange Sicht viel einfacher zu handhaben.

Ich habe von Rspec und Cucumber gehört, bin aber von ihnen völlig verwirrt.

Ich würde gerne wissen, was der Unterschied zwischen RSpec und Cucumber ist und wofür sie verwendet werden.

Es wäre auch nützlich zu wissen, ob aus der Sicht eines Anfängers (der auch der einzige Entwickler ist), ob ein Testframework wirklich benötigt wird.

BanditKing
quelle
6
Um Sie noch mehr zu verwirren, könnte Minitest auch eine Option sein
lucas clemente
5
Capybara ist wirklich ein Treiber, der in jedem der Test-Frameworks verwendet werden kann, nicht in einem Framework für sich. Watir-Webdriver und Selenium sind zwei Dinge, die ähnliche Funktionen ausführen, aber einen echten Browser steuern und viel langsamer sind als Capybara, der Rack :: Test
DVG
37
Wie ist das nicht konstruktiv ???
Jason Swett
19
Tolle Frage und tolle Antwort. Es ist genau das, was ich brauchte. Ich bin verblüfft darüber, dass die Frage als nicht konstruktiv abgeschlossen wurde. Wen kümmert es, wenn es um Debatten geht? Dafür ist Community Voting da.
Dpurrington
14
Die Abstimmung zur Wiedereröffnung ist meines Erachtens fadenscheinig. Es kann definitiv (und wurde!) Mit "unterstützt durch Fakten, Referenzen oder Fachwissen" beantwortet werden, und jede StackOverflow-Frage wird möglicherweise "wahrscheinlich Debatten, Argumente und Umfragen anregen" (die wir alle kennen und gesehen haben). Wie für "Polling"? Im Who-Modus von SO geht es darum, Fragen und Antworten hoch- und runterzustimmen. Es ist im Grunde eine große Umfrage. Das zu schließen war dumm. Es ist eine gute hilfreiche Frage und Antwort zum Thema .
Adam Cameron

Antworten:

323

RSpec und Cucumber sind beide Test-Frameworks. RSpec umfasst herkömmliche Unit-Tests (dh das Testen einer Klasse oder eines Teils der Anwendung isoliert vom Rest der Anwendung. Ihr Modell macht also das, was Ihr Modell tun soll, der Controller macht das, was es tun soll usw.).

RSpec und Cucumber werden beide für Abnahmetests verwendet (dies wird als ATDD, BDD, Spezifikation anhand eines Beispiels usw. bezeichnet, je nachdem, wen Sie fragen). Hierbei handelt es sich um Business-Case-gesteuerte Integrationstests. Dies bedeutet, dass sie die Art und Weise simulieren, wie ein Benutzer die Anwendung verwendet und den gesamten Rails-Stapel verwendet, sodass Probleme mit der Art und Weise, wie die verschiedenen Teile Ihrer Anwendung zusammenarbeiten, auf eine Weise gefunden werden können, die beim Testen von Einheiten nicht der Fall ist finden.

Der Hauptunterschied zwischen RSpec und Cucumber ist der Geschäftslesbarkeitsfaktor. Die Hauptattraktion von Cucumber besteht darin, dass die Spezifikation (Merkmale) vom Testcode getrennt sind, sodass Ihre Produktbesitzer die Spezifikation bereitstellen oder überprüfen können, ohne den Code durchforsten zu müssen. Dies sind die .feature-Dateien, die Sie in Cucumber erstellen. RSpec verfügt über einen ähnlichen Mechanismus. Stattdessen beschreiben Sie einen Schritt mit einem Describe-, Context- oder It-Block, der die Geschäftsspezifikation enthält, und verfügen dann sofort über den Code, der diese Anweisung ausführt. Dieser Ansatz ist für Entwickler etwas einfacher zu bearbeiten, für nicht-technische Leute jedoch etwas schwieriger.

Welche verwenden? Wenn Sie der einzige Entwickler und Produktbesitzer sind, würde ich mich an RSpec halten. Ich bin der Meinung, dass es für einen Techniker einfacher ist, dies zu verstehen, bietet einige Vorteile, wenn es darum geht, den Umfang und die Kontrolle zu behalten, und verhindert, dass Sie sich mit RegExs für Tests herumschlagen Schritte. Wenn Sie dies für einen Kunden erstellen und dieser in Bezug auf die Spezifikation praktisch ist, wählen Sie Cucumber für Ihren Abnahmetest und verwenden Sie RSpec für Unit-Tests.

Nur um den Hauptunterschied zwischen den beiden zu demonstrieren:

Gurke:

#articles.feature
Given an article exists called "Testing Demonstration"
When I visit the list of articles
Then I should see an article called "Testing Demonstration"

#article_steps.rb
Given /^an article exists called "(.+)"$/ do |title|
  FactoryGirl.create(:article, title: title)
end 
When /^I visit the list of articles$/ do
  visit articles_path
end
Then /^I should see an article called "(.+)"$/ do |title|
  page.should have_content title
end

Rspec

describe "Articles" do
  let(:article) { FactoryGirl.create(:article) }
  context "Index Page" do
    before { visit articles_path }
    it { page.should have_content article.title }
  end
end

Diese Blog- Serie eignet sich hervorragend für den Einstieg in RSpec.

DVG
quelle
24
Dies ist eine ausgezeichnete Antwort. Vielen Dank für Ihre Zeit und Ihren Rat. Es gibt viele Bücher über Schienen, die ich gelesen habe, aber bisher habe ich noch keine gefunden, die diese Art von Unterscheidungen macht und erklärt, welche welche ist.
Nochmals vielen
2
Ich kann diese Antwort niemandem in Not empfehlen. Vielen Dank für die Details!
Ikon
3
Dies ist in der Tat eine der umfassendsten und am einfachsten zu verstehenden Antworten auf Stackoverflow (komplett mit einem großartigen Beispiel!)
Sheharyar