2011-09-12 3 views
4

다음과 같은 모카 모의가 효과가 있습니다.모카 모의 모의 제거 방법?

test.rb 파일에서

:

setup do 
    Date.stubs(:today).returns(Date.new(2011, 7, 19)) 
    Time.stubs(:now).returns(Time.new(2011,1,1,9,0)) 
end 

문제는 타이밍이 시험 깨진 것입니다. 시험 후 날짜와 시간 개체가 여전히 조롱하는 실행

Finished in -21949774.01594216 seconds.

내가 다음에 추가. (!) :

teardown do 
    Date.unstubs(:today) 
    Time.unstubs(:now) 
end 

이 각 테스트에 대한 다음과 같은 오류가 발생합니다 : WARNING: there is already a transaction in progress

언 스텁하는 것이 적절한 방법입니까? 테스트 파일의 끝에서 또는 심지어 유닛 테스트 스위트의 끝에서 unstub하는 것이 더 좋습니까?

레일 작업 3.07 및 모카 0.9.12

감사합니다.

답변

9

이것이 완전히 문제가되는지는 알 수 없지만 복수형이 아닌 unstub 일뿐입니다.

이외에는 아무런 문제가 없습니다. 한 번 스터브 되었기 때문에 각 테스트 (또는 일련의 테스트는 여러 스텁이 필요하면 스텁)가 필요합니다. 스텁되지 않고 다른 테스트를 망칠 수 있기 때문에 분명히 언 스토브해야합니다.

+6

테스트 사이에 언 스타스 할 필요가 없습니다. 각 테스트는 처음부터 시작됩니다. "unstub"의 유스 케이스는 셋업의 일부로 스텁하는 테스트 그룹이 있다면 그 그룹의 테스트 중 일부는 스텁하지 않아야합니다. –

+0

"언 스텁 (unstub)"이 아닌 "언 스텁 (unstub)"이 복수형 인 경우 : "언 스텁 (unstubs), 언 스토브 (unstubs)" 나는 모카의 동사 선택이 일관성이 없다고 생각한다. –

5

허용되는 답변은 잘못된 정보로 인해 유해한 것으로 간주되어야합니다.

Mocha와 같은 조롱 라이브러리의 주요 목적 중 하나는 다양한 테스트 라이브러리에 통합의 일부로 자동 모의/스텁 분리를 제공하는 것입니다. 실제로 GitHub repo for Mocha을 보면 여러 가지 테스트 프레임 워크의 모든 버전에서 Mocha가 원활하게 작동하도록하는 데 상당한 유지 관리 노력이 필요하다는 것을 알 수 있습니다.

이것이 제대로 작동하지 않으면 모카의 내장 분해가 작동하지 않는 이유를 알아야합니다. 직접 해체 할 때 수동으로 언 스텁을하면 문제에 대한 정보를 얻는 것이고 스텁 누출이나 모카를 잘못 사용하면 문제를 숨길 수 있습니다.

만약 내가 야생에서 이런 종류의 것으로 보아온 가장 일반적인 원인이기 때문에 어떻게 든 야생 테스트를 돈이 귀하의 스텁에있을 것입니다,하지만 실제 정보가 충분하지 않습니다 정말로 확인하는 질문에서.