2010-03-11 3 views
2

저는 최근에 RhinoMocks를 사용해 왔지만 계속 문제가 있습니다. 내가 디버거에 침입 모의가 기록 모드에있는 동안 코드를 통해 단계, 난의 라인을 따라 예외 치울 :RhinoMocks 및 Heisenbugs

System.InvalidOperationException: Previous method 'SuchAndSuch.ToString();' 
requires a return value or an exception to throw. 

을하지만 디버거에 침입없이 동일한 코드를 실행하는 경우 것입니다 성공적으로 실행하고 모의를 작성하십시오.

저는 디버거가 객체의 ToString()을 호출하여 지역 및 다른 조사 식 창에 표시한다는 것을 확신합니다. 그러나 모의가 기록 모드에 있기 때문에 RhinoMocks는 ToString()에 대한 호출을 완전히 올바르게 설정되지 않은 기대치로 간주합니다. 분명히 이것은 구체적인 클래스의 부분 모의 객체에서만 발생합니다. 인터페이스에 대한 모의에서는이 동작이 발생하지 않습니다.

다른 사용자에게이 문제가 발생합니까? 간단한 치료가 있습니까? moq 나 TypeMock 같은 다른 프레임 워크에이 문제가 있습니까?

감사합니다,

~ 저스틴

답변

3

나는 몇 년 전 NMock와 유사한 문제를 가진 기억 할 수 있습니다. 기본적으로 DebuggerDisplayAttribute 또는 유사하게 사용하지 않는 한 디버거가 ToString 메서드를 사용하여 속성을 호출하고 표시하기 때문에이 문제가 발생합니다.

strict mock을 사용하면 특히 문제가 될 수 있습니다. 그 이유는 지정한 횟수만큼만 구성원을 호출 할 수 있기 때문이며 디버거가이를 방해합니다. loose mock을 사용하면이 문제 (및 기타 여러 문제)를 해결할 수 있습니다.

Rhino Mocks의 레코드/재생 메커니즘에서 벗어나 더 새롭고 더 나은 사용을 시작할 수도 있습니다. 람다 구문.

Moq는 lamda 구문을 (거의) 독점적으로 사용하지만 결코 그런 문제가 없었습니다.하지만 요즘에는 단위 테스트가 디버깅을 대체하기 때문에 디버깅을하지 않습니다.

또 다른 해결 방법은 자동차로컬 디버거 창을 숨기는 것입니다.

+0

정보 주셔서 감사합니다. 나는 람다 문법을 보지 못했다. 그것에 대해 알기위한 좋은 출발점에 대한 링크가 있습니까? – RationalGeek

+0

다음은 원래 발표입니다. http://ayende.com/Blog/archive/2008/05/16/Rhino-Mocks--Arrange-Act-Assert-Syntax.aspx –

+0

또한 일반적으로 AAA 구문이라고도합니다. http : //ayende.com/Wiki/Rhino+Mocks+3.5.ashx –

-1

마크가 제안했듯이, record-replay-verify 접근법 사용을 중단하고 권장 된 AAA 접근법 (정렬, 실행, 단정)으로 스텁을 사용하기 시작하면이 문제는 사라져야합니다.

나는 blog post에서 차이점과 Rhino Mocks를 함께 수행하는 방법에 대해 설명하려고 노력했습니다.

+0

나에게 AAA는 기록 재생 검증과 모순되지 않는다. 오히려 단순히 조롱 API를 사용하거나 사용하지 않고 테스트의 전반적인 구성, 모든 테스트를 간단히 설명합니다. "Record-Replay-Verify"는 행동 지향적 조롱 API를 사용하는 테스트 조직을 간단하게 설명합니다. 기대치 *를 기록한 다음 다시 재생하고 마지막으로 검증 할 수 있습니다. –