당신은 가짜 대상으로 모의 (또는 더블) 생각할 수있는 루비 dev에 아니에요. 테스트 중에 테스트에서 쉽게 사용할 수없는 객체로 작업해야하는 경우 모의 객체를 사용하여 객체가 어떻게 동작하고 동작하는지 예상하는 방법을 사용할 수 있습니다. 스텁은 비슷한 방식으로 사용할 수 있지만 개체의 개별 메서드에서 사용할 수 있습니다.
여기 모두를 많이 사용하는 다소 인위적인 예입니다 :
class Client
def connect_to_server
if Server.connect.status == 'bad'
show_an_error
else
do_something_else
end
end
def do_something_else; end
def show_an_error; end
end
context "failure" do
it "displays an error" do
bad_network_response = double("A bad response from some service", :status => 'bad')
Server.should_receive(:connect).and_return(bad_network_response)
client = Client.new
client.should_receive(:show_an_error)
client.connect_to_server
end
end
당신은 모의 객체 또는 스터 빙을 많이 사용하는 것은 나쁜 생각이라고 상상할 수를; 이것은 기본적으로 테스트에서 코드의 일부를 숨기는 것이지만 일부 어려운/희귀 한 테스트 시나리오에서는 쉬운 솔루션입니다.
공장 소녀는 테스트 용 데이터를 생성하는 데 유용합니다. 모델을위한 인스턴스를 만들기 위해 공장을 사용하는 것이 좋습니다. 많은 테스트 데이터가 필요한 테스트를해야 할 수도 있습니다. 그러면 조명기를 사용하지 않고 복잡한 객체를 명시 적으로 만드는 것이 지루할 수 있습니다.
나는 틀릴 수도 있지만, 당신이 스터브에서 실수를 저질렀다고 생각합니다. 스텁 개체 또는 모의 개체 또는 스텁 메서드 또는 조롱 된 메서드를 가질 수 있습니다. 차이점은 사용 방법에 있습니다.스텁은 실제로 다른 종속성을 호출하지 않고 테스트를 수행하는 것입니다. 모의도 똑같지 만 호출이 필요하며 테스트의 일부입니다. 스텁과 모의가 모두있는 가짜 개체를 가질 수 있습니다. Rspec은 심지어 모의 대신에 "이중"이라고 부릅니다. – fregas