실행할 수 있는. 단일 클래스를 테스트하는 단위 테스트의 경우 스텁이 유용합니다. 예를 들어
는, 다른 객체가
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
병목 현상을 스텁을 사용하여 잘못된 일을 스텁만큼 간단합니다. 데이터베이스를 치는 것을 피하거나 생성되지 않을 수있는 관련 데이터를 만지는 것을 피하는 데 도움이됩니다. 단위 테스트를하는 경우 스텁은 일반적으로 훌륭한 도구입니다. 단위 테스트는 간단해야하며 관련 데이터 또는 해당 데이터를 적용하는 프로세스를 모두 테스트 할 필요는 없습니다. 옳은 일을 꾸짖는 것은 사람들이 일반적으로 잘못 이해하는 것입니다. –
작은 변화가 극도로 민감한 대규모 엔터프라이즈 애플리케이션에서 '스텁'을 피하고 실제로 데이터베이스 상호 작용으로 테스트하는 것이 더 좋지 않을까요? (테스트 데이터베이스 및 테스트 데이터 포함) –