RSpec과 Cucumber의 차이점은 무엇입니까? [닫은]


114

저는 6 개월간의 Rails 개발 경험이 있습니다. 인증 및 권한 부여 및 postgresql db와 함께 현재 사용중인 웹 애플리케이션을 구축했습니다.

두 번째 Rails 애플리케이션으로 이동하고 있지만 이번에는 학습 한 후에 TDD를 사용하여 개발하고 싶습니다. 확장하고 버그를 수정하는 것이 훨씬 쉽다는 것을 알았 기 때문입니다. 개발 속도는 느리지 만 장기적으로는 처리하기가 훨씬 쉽습니다.

Rspec과 Cucumber에 대해 들어 봤지만 완전히 혼란 스럽습니다.

RSpec과 Cucumber의 차이점과 용도를 알고 싶습니다.

초보자 (단독 개발자이기도 한)의 관점에서 테스트 프레임 워크가 정말로 필요한지 아는 것도 유용합니다.


6
더욱 혼동하기 Minitest 또한 옵션이 될 수
루카스 클레멘테

5
Capybara는 실제로 프레임 워크 자체가 아닌 모든 테스트 프레임 워크에서 사용할 수있는 드라이버입니다. Watir-webdriver와 Selenium은 유사한 기능을 수행하지만 실제 브라우저를 구동
DVG를

37
이것이 건설적이지 않은 이유는 무엇입니까 ???
Jason Swett 2015

19
훌륭한 질문과 훌륭한 답변. 내가 필요로하는 것입니다. 나는 비 구조적이라는 질문이 끝나는 것에 당황합니다. 토론을 유도 할 것인지 누가 신경 쓰나요? 그것이 커뮤니티 투표의 목적입니다.
dpurrington

14
질문을 종결하기위한 근거가 타당하다고 생각하기 때문에 재개에 대한 투표는 그럴듯합니다. 그것은 확실히 할 수있다 (그리고있다!) "사실, 참조, 또는 전문 기술 지원"을 사용하여 대답하여 어떤 StackOverflow의 질문 아마도 "것입니다 가능성이 SOLICIT 논쟁, 인수, 폴링"(우리 모두 알고가 본합니다). "폴링"은? SO의 누가 운영 방식은 질문과 답변을 찬성 및 반대 투표하는 것입니다. 기본적으로 하나의 큰 여론 조사입니다. 이것을 닫는 것은 멍청했다. 주제 질문과 답변 도움이 됩니다 .
Adam Cameron

답변:


323

RSpec과 Cucumber는 모두 테스트 프레임 워크입니다. RSpec에는 기존의 단위 테스트가 포함됩니다 (즉, 애플리케이션의 나머지 부분과 격리 된 상태에서 애플리케이션의 일부 또는 클래스를 테스트하는 것을 의미합니다. 따라서 모델은 모델이 수행해야하는 작업을 수행하고 컨트롤러는 수행해야하는 작업을 수행하는 등).

RSpec과 Cucumber는 모두 수락 테스트에 사용됩니다 (귀하가 요청하는 사람에 따라 ATDD, BDD, 예제 별 사양 등으로 불림). 이는 비즈니스 사례 중심의 통합 테스트입니다. 즉, 사용자가 애플리케이션을 사용하는 방식을 시뮬레이션하고 전체 Rails 스택을 사용하므로 애플리케이션의 여러 부분이 함께 작동하는 방식의 문제는 단위 테스트가 수행하지 않는 방식으로 발견 될 수 있습니다. 찾기.

RSpec과 Cucumber의 주요 차이점은 비즈니스 가독성 요소입니다. Cucumber의 주요 장점은 사양 (기능)이 테스트 코드와 분리되어 있으므로 제품 소유자가 코드를 파헤 치지 않고도 사양을 제공하거나 검토 할 수 있다는 것입니다. 이것들은 Cucumber에서 만드는 .feature 파일입니다. RSpec에는 유사한 메커니즘이 있지만 대신 비즈니스 사양이 포함 된 Describe, Context 또는 It 블록을 사용하여 단계를 설명하고 즉시 해당 명령문을 실행하는 코드를 갖게됩니다. 이 접근 방식은 개발자가 작업하기가 조금 더 쉽지만 비 기술적 인 사람들에게는 조금 더 어렵습니다.

어느 것을 사용해야합니까? 당신이 유일한 개발자이자 제품 소유자라면, 저는 RSpec을 고수 할 것입니다. 기술적 인 사람이 이해하기 더 쉬우 며 범위를 지정하고 제어하는 ​​데 몇 가지 이점을 제공하며 테스트를 위해 RegEx를 엉망으로 만들지 않도록합니다. 단계. 클라이언트를 위해 이것을 구축하고 사양과 관련하여 실습중인 경우 수락 테스트에 Cucumber를 사용하고 단위 테스트에 RSpec을 사용하십시오.

둘의 주요 차이점을 보여주기 위해 :

오이:

#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

블로그 시리즈는 RSpec을 사용하는 데 탁월합니다.


24
이것은 훌륭한 대답입니다. 시간과 조언을 해주셔서 감사합니다. 내가 읽은 레일에 관한 많은 책이 있지만 지금까지 이러한 종류의 구별을 만들고 어느 것이 무엇인지 설명하는 책을 찾지 못했습니다. 다시 한 번 감사합니다
banditKing 2012-08-01

2
나는 도움이 필요한 사람에게이 대답을 덜 추천 할 수 없었다. 세부 사항에 감사드립니다!
아이콘

3
이것은 실제로 stackoverflow에 대한 가장 포괄적이고 이해하기 쉬운 답변 중 하나입니다 (훌륭한 예제로 완성되었습니다!)
Sheharyar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.