2011-03-02 3 views
28

모의 및 스텁을 이해하지 못합니다. 테스트 케이스에서 Mock을 언제, 왜, 어떻게 사용하는지 알고 싶습니다. 루비 온 레일즈의 모의 (Mocks)와 스텁 (Stubs)에 대한 유용한 프레임 워크가 있다는 것을 알고 있지만, 목적을 알지 못하면 내 앱에서 사용하기를 꺼려합니다.모의 및 스텁

모의 및 스텁에 대해 명확하게 설명해 주시겠습니까? 도와주세요.

답변

2

동작을 확인하기 위해 상호 작용 기반 테스트에 모의을 사용합니다. mock을 사용하면 테스트중인 메소드가 다른 메소드를 호출했다고 주장 할 수 있습니다. 예를 들어 컨트롤러 객체가 저장소를 호출하여 데이터를 가져 오는지 확인할 수 있습니다.

스텁은 상태 기반 테스트에서 특정 응용 프로그램 상태를 설정하는 데 사용됩니다. 조롱과 달리 전화가 걸려 오는지 여부는 걱정하지 않아도됩니다. 예를 들어, 일부 저장소 코드를 테스트하는 경우 데이터베이스 연결이 닫힐 때 저장소가 대소 문자를 올바르게 처리하도록 스텁 메서드를 설정하고자 할 수 있습니다.

59

내 아주 간단한 대답은 :

  • 다른 무언가로
  • 스텁을 비슷한 인터페이스를 가지고 있습니다 가짜 방법을 특정 대답을 반환 객체 조롱

으로 우리는 동일한 것을 달성하기 위해 노력하고 있습니다. 특정 단위 (모델/뷰/컨트롤러/모듈)를 개별적으로 테스트하려고합니다. 예 : 컨트롤러를 테스트 할 때 모델을 테스트하고 싶지 않으므로 모의 (mock)를 사용합니다. 올바른 메소드가 호출되었는지 확인하려고합니다. find. 그래서 우리의 모의에는 데이터베이스에 실제로 가지 않고도 미리 정의 된 것을 반환 할 스텁이 있습니다.

그래서 우리는 기대를 테스트합니다 : 실제로 호출하지 않고 (다른 유닛에서) 호출 될 것으로 예상되는 메소드입니다. 그 특정 방법의 테스트는 자체 테스트에서 다뤄져야합니다.

+1

굉장한 설명! –

+0

뛰어난 설명! 그 물건들로 고생하고 있었고, 정말 기뻤습니다. –

14

Fowler의 기사 mocks are not stubs에 따르면 스텁은 외부 호출과 독립적 인 가짜 메소드이며 mock은 호출에 대한 사전 프로그래밍 된 반응이있는 가짜 객체입니다.

더 구체적이고 개체 관련 : 특정 매개 변수가 전달되면 개체가 특정 결과를 반환하면입니다. 객체의 동작은 모방되거나 "조롱 (mocked)"됩니다.

스터 빙이 더 일반적이고 방법과 관련이 있습니다. 스텁 방식은 일반적으로 모든 매개 변수에 대해 항상 동일한 결과를 반환합니다. 메소드의 동작은 고정되거나, 고정되거나 "스터브"됩니다.

관련 문제