2013-08-28 6 views
1

stub을 사용하면 어쨌든 실제 수업을 테스트해야하는 이유는 무엇입니까?Rspec 스텁 왜 전혀 사용하지 않습니까

다른 클래스를 테스트하고 다른 관련 클래스 메서드를 사용하지 않으려는 경우가 있지만 실제 메소드를 사용하는 것이 더 좋습니다.

빠르게

우리가 고려되어야한다고하지만 다른 혜택이 있습니까 시험에 사용되는 하나의 방법의 다른 관련 작업을 생략하고 최종 결과를 반환 할 때 난 단지 정말 혜택을 볼 수 있습니까?

(나는 또한 stub 당신의 코드가 발전함에 따라 변경할 수 있으며이 테스트에서 생성하는 것과 다른 출력을 생성 할 수 있기 때문에 위험 aswell 생각보다 외에도)

그것은 당신이 시험에 따라
+1

병목 현상을 스텁을 사용하여 잘못된 일을 스텁만큼 간단합니다. 데이터베이스를 치는 것을 피하거나 생성되지 않을 수있는 관련 데이터를 만지는 것을 피하는 데 도움이됩니다. 단위 테스트를하는 경우 스텁은 일반적으로 훌륭한 도구입니다. 단위 테스트는 간단해야하며 관련 데이터 또는 해당 데이터를 적용하는 프로세스를 모두 테스트 할 필요는 없습니다. 옳은 일을 꾸짖는 것은 사람들이 일반적으로 잘못 이해하는 것입니다. –

+0

작은 변화가 극도로 민감한 대규모 엔터프라이즈 애플리케이션에서 '스텁'을 피하고 실제로 데이터베이스 상호 작용으로 테스트하는 것이 더 좋지 않을까요? (테스트 데이터베이스 및 테스트 데이터 포함) –

답변

1

실행할 수 있는. 단일 클래스를 테스트하는 단위 테스트의 경우 스텁이 유용합니다. 예를 들어

는, 다른 객체가 did_it! 작업을 완료 할 때 이메일을 보내는 클래스를 테스트하는 가정이 경우

describe Emailer do 
    context ".send_email" do 
    it "sends an email if another object 'did_it!'" do 
     obj = Obj.new 
     Emailer.send_email(obj).should == true # the email sends successfully 
    end 
    end 
end 

obj.did_it! 슈퍼 비용이 많이 드는 작업 인 경우, 또는 실패 할 수 있습니다 간헐적으로이 테스트에 문제가있을 수 있습니다.

그러나,이 테스트에서 우리는 그것이 우리가 테스트되지 무엇 때문에 Emailer.send_email 실행 올바르게 obj.did_it! 반환 true은 - 우리가의 obj.did_it! 방법은 작동하는지 상관하지 않습니다 때 관심.

그래서, 우리가 말을 스텁을 사용하여 "obj.did_it!이 성공한다고 가정 Emailer.send_email 실제로 이메일을 보내합니까?"

describe Emailer do 
    context ".send_email" do 
    it "sends an email if another object 'did_it!'" do 
     obj = stub(:did_it! => true) 
     Emailer.send_email(obj).should == true # the email sends successfully 
    end 
    end 
end 
관련 문제