2013-07-12 3 views
1

RhinoMock을 사용하여 테스트 해 보겠습니다. 나는 단 aproach를 사용하고, 그래서 일반적으로 선언이 실패한 경우 fooMock.AssertWasCalled(x=>x.Foo(bar))RhinoMock에서 어설 션이 실패한 경우 GetArgumentsForCallsMadeOne을 인쇄하십시오.

끝난거야, 나는 보통 내가 모의에 만들어진 호출 무엇을 볼 수있는이 fooMock.GetArgumentsForCallsMadeOn(x=>x.Foo(null)).PrintDump()

처럼 보이는 라인을 추가 할 것 (일반적으로 문제는 mock이 잘못된 인수로 호출되기 때문에 도움이 됨).

프로세스를 자동화 할 수있는 방법이 있습니까? 따라서 RhinoMock에 어설 션이 실패한 경우 모의 메소드에서 호출 된 내용을 인쇄하도록 알려주십시오.

+0

Rhino는 기본적으로 예상되는 인수와 실제 인수를 인쇄하지 않습니다? –

+0

아니요, 단지'Expected # 1, actual # 0'과 같은 것을 출력합니다 (이것은 당신이 예상하는 인자로 메소드가 호출되지 않았다는 것을 의미합니다). – vorou

답변

1

실패한 어설 션에 대한 인수를 덤프하는 기본 제공 메커니즘이없는 것 같습니다.

나는 다음과 같은 확장 방법을 사용하는 것이 좋을 것 :

public static void AssertWasCalledAndDump<T>(this T self, Action<T> action) 
{ 
    try 
    { 
     self.AssertWasCalled(action); 
    } 
    catch (Rhino.Mocks.Exceptions.ExpectationViolationException) 
    { 
     self 
      .GetArgumentsForCallsMadeOn(action, options => options.IgnoreArguments()) 
      .PrintDump(); 
     throw; 
    } 
} 

다음 코드에서 그냥 쓸 수 있습니다 :

fooMock.AssertWasCalledAndDump(x=>x.Foo(bar)); 

PS
난 당신이 이미 가지고있는 가정 PrintDump() 확장의 구현입니다.