it-swarm.com.de

Was ist der Unterschied zwischen RSpec und Gurke?

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 fahre mit meiner zweiten Rails Anwendung fort, aber dieses Mal möchte ich sie nach den gewonnenen Erkenntnissen mithilfe von TDD entwickeln, da es viel einfacher ist, sie zu skalieren und Fehler zu beheben. Es ist langsam zu entwickeln, aber auf lange Sicht ist es viel einfacher, damit umzugehen.

Ich habe von Rspec und Cucumber gehört, bin aber durch sie gründlich verwirrt.

Ich würde gerne wissen, worin der Unterschied zwischen RSpec und Cucumber besteht 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) ein Testframework wirklich benötigt wird.

112
banditKing

RSpec und Cucumber sind beide Test-Frameworks. RSpec umfasst das traditionelle Testen von Einheiten (dh das Testen einer Klasse oder eines Teils der Anwendung, die vom Rest der Anwendung isoliert ist. Ihr Modell tut also, was Ihr Modell tun soll, der Controller tut, was es tun soll usw.).

RSpec und Cucumber werden beide für Akzeptanztests verwendet (dies wird ATDD, BDD, Specification by Example usw. genannt, je nachdem, wen Sie fragen). Hierbei handelt es sich um geschäftsfallbasierte Integrationstests, bei denen die Art und Weise simuliert wird, wie ein Benutzer die Anwendung verwendet, und der gesamte Rails) -Stack verwendet wird, sodass Probleme bei der Zusammenarbeit der verschiedenen Teile Ihrer Anwendung auftreten können gefunden in einer Weise, die Unit-Tests nicht finden.

Der Hauptunterschied zwischen RSpec und Cucumber liegt in der geschäftlichen Lesbarkeit. Das Hauptanliegen von Cucumber ist, dass die Spezifikationen (Merkmale) nicht mit dem Testcode identisch sind, sodass Ihre Produktbesitzer die Spezifikationen bereitstellen oder überprüfen können, ohne den Code durcharbeiten 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 handhaben, für Nicht-Techniker jedoch etwas schwieriger.

Welches verwenden? Wenn Sie der einzige Entwickler und Produktbesitzer sind, würde ich mich an RSpec halten. Ich bin der Meinung, dass es für eine technische Person einfacher ist, dies zu verstehen, bietet ein paar Vorteile, wenn Sie den Umfang und die Kontrolle behalten und sich nicht mit RegExs für Tests herumärgern Schritte. Wenn Sie dies für einen Kunden erstellen und dieser in Bezug auf die Spezifikation praktisch vorgeht, gehen Sie mit Gurke zu Ihrem Abnahmetest und verwenden Sie RSpec für Komponententests.

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 ist hervorragend für den Einstieg in RSpec geeignet.

317
DVG