【问题标题】:Mocking a method with different signatures where one has Object as a parameter type模拟具有不同签名的方法,其中一个具有 Object 作为参数类型
【发布时间】:2015-10-03 04:35:37
【问题描述】:

我有以下接口

public interface IInfo
{
    bool IsCompatibleWith (Object informationObject);
}

public interface IInfo<T> : IInfo
{
    bool IsCompatibleWith (T informationObject);
}

并尝试做以下模拟

Foo f = new Foo();
Mock<IInfo<Foo>> infoMock = new Mock<IInfo<Foo>>();
infoMock.Setup(i => i.IsCompatibleWith(f)).Returns(true);

然后测试运行以下几行

IInfo mockedInfo;
mockedInfo.IsCompatibleWith(f);

问题是,Setup 方法设置了IsCompatibleWith (T informationObject),而代码调用了IsCompatibleWith (Object informationObject)。如何设置两个签名?

【问题讨论】:

  • 嗨@user1039462,我的编辑被拒绝,我不得不指出Mock&lt;IInfo&lt;IModel&gt;&gt; infoMock = new Mock&lt;IInfo&lt;Foo&gt;&gt;() 无法编译(而不是编辑您的帖子),请将代码更改为Mock&lt;IInfo&lt;IModel&gt;&gt; infoMock = new Mock&lt;IInfo&lt;IModel&gt;&gt;() 或@ 987654328@。另一件事标签mono 应该替换为mocking 标签。还有一件事,如果您需要对我的回答(如下)有任何澄清,请随时询问......
  • @Old Fox:做到了,感谢指出错误。

标签: c# unit-testing mocking nunit moq


【解决方案1】:

下面的sn-p显示了两种方法的配置方式:

//configure the method with the `object` as a parameter
infoMock.Setup(i => i.IsCompatibleWith((object)f)).Returns(true);

//configure the method with the `IModel` as a parameter
infoMock.Setup(i => i.IsCompatibleWith(f)).Returns(true);

Moq 按原样记录参数。当您将实例转换为object 时,bool IsCompatibleWith(Object informationObject) 方法将接受注册

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多