使用ExpandoObject作为参数的Rhino Mock Stubbing方法

时间:2013-05-09 12:31:52

标签: c# unit-testing rhino-mocks stub expandoobject

我想对测试中的方法使用正确的参数调用存根对象和方法进行单元测试。问题是其中一个参数是动态(ExpandoObject)。如果“data”(下面的变量)是一个打字的对象,它按预期工作。

    ...
    [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”我正在测试正确的参数被传入。

TIA

1 个答案:

答案 0 :(得分:2)

我假设当第二个参数在字段expectedResultId 中具有正确的值时,您需要定义返回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);