AssertWasCalled в rhino mocks

У меня есть тестируемый объект, который выполняет довольно сложный вызов объекта доступа к данным. Это выглядит примерно так

object.DoSomething(somestring,someObject,someOtherObject,someOtherOtherObject)

В моей тестовой структуре есть имитация версии объекта, и я хочу проверить, что Dosomething был вызван с помощью somestring == "value1" и someObject.porpertyA == "value2".

Я не могу использовать простую перегрузку AssertWasCalled (), потому что я не знаю (или не интересуюсь) someOtherObject. Я заметил еще одну перегрузку, которая выполняет действие для ограничений настройки, но я никогда не видел, чтобы она использовалась.


person captncraig    schedule 01.07.2009    source источник


Ответы (2)


Кусок пирога:

yourstub.AssertWasCalled(
             x => x.DoSomething(
                Arg<string>.Is.Equal("value1"), 
                Arg<someObjectType>.Is.Equal(value2), 
                Arg<someOtherObjectType>.Is.Anything,   <======== NOTE THIS!
                Arg<someOtherOtherObjectType>.Is.Equal(value3)
             )
);
person zvolkov    schedule 01.07.2009
comment
Thaat работает отлично. Единственное, что мне показалось полезным, это использование Arg ‹someObjectType› .Matches (y = ›y.property == something); для проверки значений в объектах аргумента. - person captncraig; 01.07.2009

Ознакомьтесь с документацией по ограничениям.

Я подозреваю, что вы хотите:

Expect.Call(object.DoSomething(null, null, null, null)
      .IgnoreArguments() // Ignore those nulls
      .Constraints(Is.Equal("value1"),
                   Property.Value("PropertyA", "value2"),
                   Is.Anything(),
                   Is.Anything())
      .Return(whateverItShouldReturn);
person Jon Skeet    schedule 01.07.2009