2016-03-30 9 views
0

Я очень новичок в RhinoMocks (первый раз).rhino mocks ref param constraint

Это мой метод декларация:

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(); 

EDIT Просто нашел еще один способ сделать это:

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

Второй пример был полезен, когда я использовались сценарии Gherkin, а шаг определения результата должен был быть последним (поэтому я не мог заранее установить ожидания).

В этом случае аргументы [0] содержат параметры при первом вызове SetXmlValue(), аргументы [1] содержат параметры, когда SetXmlValue() был вызван второй раз и т. Д.