2013-07-12 57 views
1

假設我有一個使用RhinoMock的測試。我使用的是AAA的形式給出,所以它通常與 fooMock.AssertWasCalled(x=>x.Foo(bar))打印GetArgumentsForCallsMadeOne如果在RhinoMock中斷言失敗

如果斷言失敗告終,我通常會添加一行看起來像這樣 fooMock.GetArgumentsForCallsMadeOn(x=>x.Foo(null)).PrintDump()

這樣我就可以看到來電是對模擬製作(它有幫助,因爲通常問題是模擬被錯誤的參數調用)。

有沒有什麼辦法可以使過程自動化?那麼,如果斷言失敗,告訴RhinoMock打印調用是在模擬方法上進行的?

+0

犀牛默認不打印預期的和實際的參數? –

+0

不,它只是打印類似'預期#1,實際#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()的實現。