문제

최근에 Rhinomocks를 사용해 왔지만 계속 문제가 발생합니다. 모의가 레코드 모드에있는 동안 디버거에 들어가 코드를 넘어 서면 다음은 다음과 같이 예외를 얻게됩니다.

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

그러나 디버거에 침입하지 않고 동일한 코드를 실행하면 성공적으로 실행되고 모의가 생성됩니다.

그 이유는 디버거가 객체에서 tostring ()을 호출하여 현지인 및 기타 시계 창에 표시하기 때문입니다. 그러나 모의가 레코드 모드에 있기 때문에 Rhinomocks는 ToString ()에 대한 호출이 기대치 설정으로 간주하여 완전히 정확하지 않습니다. 분명히 이것은 콘크리트 클래스의 부분 모의에서만 발생합니다. 인터페이스에 대한 조롱은이 동작을 나타내지 않습니다.

다른 사람들 이이 문제를 겪었습니까? 간단한 치료법이 있습니까? MOQ 또는 Typemock과 같은 다른 프레임 워크 가이 문제가 있습니까?

감사,

~ 저스틴

도움이 되었습니까?

해결책

몇 년 전 Nmock과 비슷한 문제를 겪은 것을 기억할 수 있습니다. 기본적 으로이 문제는 디버거가 ToString 방법 (DebuggerDisplayAttribute 또는 이와 유사한 것을 사용하지 않는 한).

사용하는 경우 특히 문제가 될 수 있습니다 엄격한 조롱 그들은 당신이 지정된 횟수를 멤버들에게만 호출 할 수 있기 때문에 디버거는 이것을 방해합니다. 사용 느슨한 조롱 이 (그리고 다른 많은) 문제를 해결합니다.

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

MOQ는 Lamda Syntax (거의) 독점적으로 독점적으로 사용했으며, 그런 문제가 없었지만, 단위 테스트가 디버깅의 대체물이되었으므로 요즘에는 많은 디버깅을하지 않습니다.

또 다른 구제책은 단순히 숨기는 것입니다 자동차 그리고 현지인 디버거 창.

다른 팁

Mark가 제안한 바와 같이, 레코드 재생 검색 접근법 사용을 중단하고 권장되는 AAA 접근법 (예약, ACT, Assert)과 함께 스터브 사용을 시작하면이 문제가 사라져야합니다.

나는 이것에서 Rhino Mocks와 함께 차이점과 방법을 설명하려고 노력했습니다. 블로그 게시물.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top