2010-07-21 42 views
3

我可以設置一個模擬對象來始終返回給定的對象作爲參數嗎?我有一個方法我可以設置一個模擬來始終返回其中一個參數中給出的對象嗎?

public MyObject DoSomething(MyObject obj) 

,我想有一個模擬它總是返回OBJ每次調用DoSomething的,有點像這樣:

mock.Stub(x=>x.DoSomething(Arg<MyObject>.Is.Anything).Return(Arg<MyObject>) 

雖然我不知道什麼把在回位...

編輯:我想這:

MyObject o=null; 
mock.Stub(x=>x.DoSomething(Arg<MyObject>.Is.Anything).WhenCalled (y=> 
{ 
    o = y.Arguments[0] as MyObject; 
}).Return (o); 

這似乎像它可能是有前途,但沒有運氣。張貼在情況下,跑步別人的記憶......

回答

7

這應該做你在找什麼:

mock.Stub(x => x.DoSomething(null)) 
    .IgnoreArguments() 
    .WhenCalled(x => 
        { 
         x.ReturnValue = (MyObject) x.Arguments[0]; 
        }) 
    .Return(null) 
    .TentativeReturn(); 

基本上我用WhenCalled覆蓋空的默認返回值(我已經標記爲暫定值)與傳入DoSomething的參數的值。

+0

太棒了!謝謝,我知道這一定是可能的。 – 2010-07-21 13:26:13

+0

.TentativeReturn()是做什麼的? – Grzenio 2010-07-21 13:36:53

+0

沒問題,山姆。拼圖很有趣。 @Grzenio:TentativeReturn只是將返回值標記爲可覆蓋。如果您刪除它,上面的代碼將返回null。 (WhenCalled仍然會執行,但新的返回值不會被遵守) – 2010-07-21 13:40:57

1

更簡單的方法:

var mock = MockRepository.GenerateStub<IFoo>(); 
mock.Expect(m => m.Bar()) 
    .Return("Result goes here") 
    .Repeat.Any(); 
相關問題