2011-09-26 119 views
11

我顯然感到困惑 - 這是我用我們正在考慮的其他幾個框架(NMock,Moq,FakeItEasy)完成的任務。我有一個函數調用,我想存根。函數調用有一個out參數(一個對象)。Out參數與RhinoMocks

函數調用處於代碼中多次調用的用例中。調用代碼提交參數,包括out參數的NULL對象。我想根據提供的其他參數設置預期的OUT參數。

如何指定一個預期的INBOUND輸出參數爲NULL,是否按預期的方式填充了一個對象的預期OUTBOUND輸出參數?我已經嘗試了六種方法到了星期日,到目前爲止,我還沒有能夠返回任何東西,但是我的OUTBOUND out參數爲NULL。

回答

20

http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#OutandRefarguments

ref和out參數是特殊的,因爲你還必須使 編譯高興。關鍵字ref和out是mandantory,並且您需要一個字段作爲參數 。 Arg不會讓你失望:

User user; 
if (stubUserRepository.TryGetValue("Ayende", out user)) 
{ 
    //... 
} 
stubUserRepository.Stub(x => 
    x.TryGetValue(
    Arg.Is("Ayende"), 
    out Arg<User>.Out(new User()).Dummy)) 
    .Return(true); 

out是編譯器的要害。 Arg.Out(新用戶())是我們的重要組成部分,它指定out參數應返回新的User() 。虛擬只是指定類型的用戶, 的字段,以使編譯器很高興。

+0

我不這樣做的犀牛嘲笑3.6雖然... –

+0

該鏈接現在獲得404 Not Found。 – jakejgordon

6

如果使用存儲庫來產生模擬/存根

checkUser = MockRepository.GenerateMock<ICheckUser> 

您可以設置期望與輸出參數

checkUser 
.Expect(c => c.TryGetValue(Arg.Is("Ayende"), out Arg<User>.Out(new User()).Dummy) 
.Return(true) 
+1

我不這樣做的犀牛嘲笑3.6雖然... –

4

該解決方案是更清潔和正常工作與犀牛嘲笑3.6:

myStub.Stub(x => x.TryGet("Key", out myValue)) 
     .OutRef("value for the out param") 
     .Return(true);