2013-05-09 3 views
1

Я хочу, чтобы модуль тестировал, что тестируемый метод вызывает обрезанный объект и метод с правильными параметрами. Проблема в том, что один из параметров является динамическим (ExpandoObject). Если «данные» (переменная ниже) была типизированным объектом, она работает так, как ожидалось.Rhino Mock Stubbing метод с ExpandoObject как параметр

... 
    [Test] 
    public void MethodTest_WhenSomething_ExpectResult() 
    { 
     ... 
     dynamic data = new ExpandoObject(); 
     data.Id = param1; 
     data.Name = param2; 
     var myClass= MockRepository.GenerateStub<IMyClass>(); 
     myClass.Stub(x => x.MyMethod("hello", data).Returns(expectedResult); 
     ... 
     var actualResult = anotherClass.MethodUnderTest(param1, param2); 

     Assert.IsNotNull(actualResult); 
    } 

Любые идеи, как я могу это сделать? Кстати, я не хочу, чтобы «IgnoreArguments» Я проверяю, что право Params в настоящее время передается в.

ТИА

ответ

2

Я предполагаю, что вы должны определить окурок, который возвращает expectedResult когда второй параметр имеет правильные значения поля Id и Name.

Но теперь вы окурок определен для возврата expectedResult когда второго параметра такие же, как data объекта.

Если это так, то вам просто нужно изменить Stub определение:

myClass 
    .Stub(x => x.MyMethod(
      Arg<string>.Is.Equal("hello"), 
      Arg<IDictionary<string, object>>.Matches(d => d["Id"].Equals(param1) && d["Name"].Equals(param2)) 
     )) 
    .Return(expectedResult);