2013-11-25 22 views
2

我有一些使用RhinoMock 3.6的3歲(寫得不好)的測試。今天我升級到3.6.1,運行測試時突然出現ExpectationViolationException。RhinoMock 3.6.1錯誤地報告方法未被調用?

的設置是:

var userid = user.Identifier; 
UserRepository. 
    Expect(x => x.GetUser(Arg.Is(userid), Arg.Is(long.MinValue), out Arg<bool>.Out(true).Dummy)) 
    .Return(user); 

和例外是

Rhino.Mocks.Exceptions.ExpectationViolationException: IUserRepository.GetUser(等於6a90efd1-a290-452a-a8ac-5b38377bc597,等於-9223372036854775808,任何東西);預期#1,實際#0。

我當然已經檢查了userid的值,這沒關係。降級到3.6使測試通過。

有沒有人知道可能會導致這個問題?

+0

你有沒有預期#0,但實際#1的方法? –

+0

不,我不知道。正如降級提到解決了這個問題。你懷疑什麼? – faester

+0

'userid'是'GUID'還是'string'? –

回答

0

有一對夫婦與方式的變化的犀牛嘲笑處理出來,在3.6版本和3.6.1 ref參數,所以我會在測試方法改變這樣的事情:

var userid = user.Identifier; 
UserRepository.Stub(x => x 
     .GetUser(Arg.Is(userid), Arg.Is(long.MinValue), out myVar) 
     .OutRef(valueForMyVar) 
     .Return(user); 

如果你真的想確保你正在調用方法,你可以在測試結束時使用UserRepository.AssertWasCalled ...

+1

謝謝。您的示例確實會導致另一個異常,顯然是由於Arg.Is和「純」out參數的混合。但引入'OutRef'確實解決了我的問題:) – faester

相關問題