真正基本的moq示例失败了

时间:2012-10-23 08:30:33

标签: c# .net unit-testing nunit moq

我正在尝试Moq,而且我已经陷入了一个非常基本的例子。我想模拟一个非常简单的接口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>。 我看不出我做错了什么。请帮帮我

2 个答案:

答案 0 :(得分:12)

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

   var x = new FirstClass(mock.Object);

在Moq框架中Mock不是你嘲笑的实例(比如在Rhino Mocks中)。

答案 1 :(得分:3)

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

var x = new FirstClass(mock.Object);

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