4

我正在尝试起订量,但我陷入了一个非常基本的例子。我想模拟一个非常简单的接口 IInput:

namespace Example
{
    public interface IInput
    {
        int SomeProperty { get; set; }
    }
} 

这似乎是一项非常容易的工作。但是,当我尝试在以下测试代码中模拟它时出现编译错误:

using Moq;
using NUnit.Framework;

namespace FirstEniro._Test
{

    [TestFixture]
    class TestFirstClass
    {
        [Test]
        public void TestConstructionOk()
        {
            var mock = new Mock<IInput>();
            mock.Setup(r => r.SomeProperty).Returns(3);

            var x = new FirstClass(mock);

            Assert.That(x, Is.EqualTo(3));
        }
    }
}

编译器说“无法转换Moq.Mock<Example.IInput><Example.IInput>。我看不出我做错了什么。请帮助我

4

2 回答 2

12

使用Object模拟的属性来检索模拟对象的实例。

   var x = new FirstClass(mock.Object);

在 Moq 框架Mock中不是您正在模拟的实例(如在 Rhino Mocks 中)。

于 2012-10-23T08:32:06.647 回答
3

使用实例上的Object属性Mock来获取实际的模拟对象。

var x = new FirstClass(mock.Object);

Mock类用于设置方法/验证。Object由于 C# 编译器的限制,您需要使用访问器。您可以投票支持在Microsoft Connect上取消它(请参阅QuickStart中的说明)。

于 2012-10-23T08:31:44.763 回答