2011-09-07 5 views

답변

16

당신은 가짜 대상으로 모의 (또는 더블) 생각할 수있는 루비 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 

당신은 모의 객체 또는 스터 빙을 많이 사용하는 것은 나쁜 생각이라고 상상할 수를; 이것은 기본적으로 테스트에서 코드의 일부를 숨기는 것이지만 일부 어려운/희귀 한 테스트 시나리오에서는 쉬운 솔루션입니다.

공장 소녀는 테스트 용 데이터를 생성하는 데 유용합니다. 모델을위한 인스턴스를 만들기 위해 공장을 사용하는 것이 좋습니다. 많은 테스트 데이터가 필요한 테스트를해야 할 수도 있습니다. 그러면 조명기를 사용하지 않고 복잡한 객체를 명시 적으로 만드는 것이 지루할 수 있습니다.

+1

나는 틀릴 수도 있지만, 당신이 스터브에서 실수를 저질렀다고 생각합니다. 스텁 개체 또는 모의 개체 또는 스텁 메서드 또는 조롱 된 메서드를 가질 수 있습니다. 차이점은 사용 방법에 있습니다.스텁은 실제로 다른 종속성을 호출하지 않고 테스트를 수행하는 것입니다. 모의도 똑같지 만 호출이 필요하며 테스트의 일부입니다. 스텁과 모의가 모두있는 가짜 개체를 가질 수 있습니다. Rspec은 심지어 모의 대신에 "이중"이라고 부릅니다. – fregas

15

첫 번째 정류장은 마틴 파울러의 유명한 기사입니다. 테스트 복식은 일반적으로 테스트중인 시스템 (또는 테스트중인 클래스)이 필요로하는 종속성을 시뮬 레이팅하는 데 사용되므로 SUT/CUT이 종속성과 별도로 테스트 될 수 있습니다.

  • 스텁 : 위키

    - (주의해야 할 점은 정확한 용어는 Jeff here에서 언급 한 바와 같이 꽤 민감한 주제 예를 들어 수 있습니다) 메서드는 단지 상수 값 w를 반환 할 수 있습니다. SUT에 의해 호출 된 암탉, 예를 들면. SUT의 특정 테스트 케이스를 수행하기위한 것입니다.

  • *Mockito (Java) 및 Moq (.Net)과 같은 프레임 워크를 사용하면 최소한의 코드로 종속성 인터페이스에 대한 모의 클래스를 빌드하고 SUT가 모의 객체와 올바르게 상호 작용했는지 확인하는 기능을 제공 할 수 있습니다. 예 SUT가 mock의 메소드를 올바른 매개 변수와 함께 정확한 횟수만큼 호출했는지 확인함으로써.

* 면책 조항 - 나는

+6

읽었을 때 [Tock of Mockery 만들기]로 이동할 수 있습니다 (http://avdi.org/devblog/2011/09/06/making-a-mockery-of-tdd/) –

관련 문제