最小起订量不能创建类的模拟对象在构造函数中的参数可为空 [英] Moq cannot create mock object of class with nullable parameter in the constructor

查看:267
本文介绍了最小起订量不能创建类的模拟对象在构造函数中的参数可为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个类:

public class TestClass
{
 public TestClass(int? foo, string bar)
 {
   //..Something
 }
}

我试图用MOQ这样嘲笑它

I am trying to mock it using MOQ like this

var mockA = new Mock<A>(new object[] {(int?)1, string.Empty})

或此,

var mockA = new Mock<A>(new object[] {1 as int?, string.Empty})

即使是这样

var mockA = new Mock<A>(new object[] {(int?)null, string.Empty})

当我试图让这样的对象

var objA = mockA.Object

这引发此异常

无法实例化类的代理:识别TestClass 。
找不到一个构造函数,将匹配给定的参数:
System.Int32,
System.String

Can not instantiate proxy of class: TestClass. Could not find a constructor that would match given arguments: System.Int32, System.String

(对于第三个它抛出空引用除外)

(for the third one it throws null reference exception)

如何使它认识到,第一个参数的类型是可空System.Int32,而不是System.Int32。

How to make it recognize that first argument is of type Nullable System.Int32 and not System.Int32.

(请忽略我嘲弄一类,而不是一个接口。)

(Please ignore that I am mocking a class and not an interface.)

推荐答案

<击>为了嘲笑与起订量的对象,对象本身必须有一个公共空的构造。
方法你想嘲笑必须虚拟为了重写

编辑:

我跑起订量v4.0.20926(从最新的NuGet)和以下工作:

I'm running Moq v4.0.20926 (latest from NuGet) and the following work:

[TestMethod]
public void TestMethod1()
{
    var mock = new Mock<TestClass>(new object[] {null, null});
    mock.Setup(m => m.MockThis()).Returns("foo");

    Assert.AreEqual("foo", mock.Object.MockThis());
}

public class TestClass
{
    public TestClass(int? foo, string bar)
    {
    }

    public virtual string MockThis()
    {
        return "bar";
    }
}

这篇关于最小起订量不能创建类的模拟对象在构造函数中的参数可为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆