2016-03-30 172 views
0

我對RhinoMocks(第一次)很新。rhino mocks ref參數約束

這是我的方法聲明:

void SetXmlValue(ref string path, ref string Value); 

我需要驗證,對於給定的輸入,當SetXmlValue被調用時,它被稱爲與路徑和值

特定值我已經嘗試了幾個選項包括:

_mockClass.Expect(o => o.SetXmlValue(ref Arg<string>.Ref(Rhino.Mocks.Constraints.Is.Equal(path), "somepath").Dummy ,ref Arg<string>.Ref(Rhino.Mocks.Constraints.Is.Equal(value), "somevalue").Dummy)); 

_mockClass.Expect(o => o.SetXmlValue(ref Arg<string>.Out(path).Dummy, ref Arg<string>.Out(value).Dummy)) 

但是,我無法確認SetXmlValue方法是用我希望調用的參數調用的。

任何輸入?

回答

0

這驗證了該方法被調用以正確的PARAMS:

_mockClass.Stub(x => x.SetXmlValue(null, null)) 
        .IgnoreArguments() 
        .WhenCalled(invocation => Assert.AreEqual("somepath", invocation.Arguments[0])); 
        .WhenCalled(invocation => Assert.AreEqual("somevalue", invocation.Arguments[1]));   

_mockClass.VerifyAllExpectations(); 

編輯 剛剛發現這樣做的另一種方式:

_mockClass.GetArgumentsForCallsMadeOn(x => x.SetXmlValue(null, null)); 
Assert.AreEqual("somepath", arguments[0][0]); 
Assert.AreEqual("somevalue", arguments[0][1]); 

第二個例子是有益的,當我使用了小黃瓜場景,結果的步驟定義必須是最後一個(這就是爲什麼我無法預先設置預期)。

在這種情況下,參數[0]包含第一次調用SetXmlValue()時的參數,當第二次調用SetXmlValue()時參數[1]包含參數,依此類推。