2012-02-22 2 views
2

나는 오이와 카피 바라를 사용하여 내 웹 응용 프로그램의 기본 구성을 테스트하는 기능을 작성했습니다. 기능의 일부는 다음과 같습니다.오이/카피 바라 시험 일반화

And the page has a photo labeled "Device" 
And the page has a checkbox labeled "Device" 
And I check "Device" 
And I submit the form 
Then the resulting page has no photo labeled "Device" 

위대한 기능을했습니다. 자신의 서버에 웹 응용 프로그램을 설치하고 구성한 사용자가 자신의 구성이 올바른지 확인하는 데 도움이되도록 테스트를 실행할 수 있기를 바랍니다. "장치"는 사용자가 변경할 수있는 기본 구성 파일의 문자열입니다. 그것은 배열의 요소이며, 응용 프로그램의 인스턴스를 구성 할 때 배열에 추가하거나 제거 할 수 있습니다.

이 도구의 합리적인 사용인가 아니면 오이 및/또는 카피 바라를 학대 무엇입니까? 그것이 합리적이라면 어떻게해야할까요? 나쁜 생각이라면 무엇을 위해이 도구 대신 어떤 도구를 사용할 수 있습니까?

다음은 어떻게 작동하는지 보여줍니다. 이 방법이 최선의 방법인지 확신 할 수 없습니다. 이 작업을 수행하려면

이 기능이 더이 같은보고해야합니다 : 해당 단계 정의에서

And the page has at least 3 photos, let us call the last one "third_photo" 

, 나는 첫 번째 사진에 해당하는 레이블 문자열을 빼고 할당하는 XPath를 사용 클래스 변수에 저장된 Hash 객체.

And /^I the page has at least (\d*) photos, let us call the last one "([^\"]*)"$/ do |n, name| 
    if ! defined?(@note) 
    @note = Hash.new; 
    end 
    @note[name] = find(:xpath, '//ol[@id="menu"]/li[' +n+ ']/a').text; 
end 

이제 후속 단계 정의에서 그 값에 액세스 할 수 있습니다.

그래서, 다른 기능을 할 수 있습니다

Then I uncheck "third_item" 

그리고 해당 단계 정의는 다음과 같을 수 있습니다

Then /I uncheck "([^\"]*)"/ do |item| 
    uncheck(@note[item]) 
end 

그러나 나는 그것에 대해 기분이 좋지 않습니다. 그 밖의 것이 없다면 단계 정의 외부에서 정의 된 다른 인스턴스 변수와 이름 충돌이있을 수 있다고 생각합니다. 내가 잘못 작업 수행하거나 다른 내가 잘못된 도구를 사용하고있어 어느 것 같은

그것은 느낀다. 이 작업을 수행하는 올바른 방법은 무엇입니까?

답변

0

http://www.cloudspace.com/blog/2010/06/23/using-instance-variables-with-cucumber-steps/의 단계 정의에서 인스턴스 변수를 사용하는 방법에 대한 블로그 게시물이 있습니다.

메모 작성자는이 수반 커플 링 주위 적어도 하나의 가능한 방법에 대해 이야기. 특히

는 davetron5000는 말한다 :

우리 모두에서 인스턴스 변수를 사용하지하는 것입니다, 대신 는 공유 상태에서 갈 수있는이 해시 각 테스트 실행 후 클리어있다 제공 무엇입니까. .이상하지,하지만 변수 사방에 임의의 예보다 약간 청소기 (그리고 각 시험 전에 합리적으로 깨끗한 상태를 보장합니다)

0

은 후 낚시를하는지는 모르겠지만, 상당히 밀접하게 결합되어 사용자의 테스트 및 구현 같은 느낌. 어쩌면 당신이 갖고있는 감정 일 것입니다. 테스트에서 앱을 설명하는 것처럼 보입니다. 질문을 잘 이해하지 못해서 좋은 대답을하지 못했습니다. 그러나 나는 당신이 당신의 테스트를 당신의 구현에서 분리하려고 시도 할 것을 촉구 할 것이고, 발견 될 기다리고있는 추상화가 있는지보기를 바랄 것이다.

+0

나에 대한 좋은 느낌 아니에요 부분은의 사용이다 클래스 변수는 한 단계 정의에서 다른 단계 정의로 값을 전달합니다. 나는 캡슐화를 깨뜨리고있는 것처럼 느껴진다. 그러나 내가 아는 한 모두, 그것은 실제로 권장되는 접근 방법입니다. – Trott