【问题标题】:Really basic moq example fails真正基本的起订量示例失败
【发布时间】:2012-10-23 08:30:33
【问题描述】:

我正在尝试最小起订量,但我陷入了一个非常基本的示例。我想模拟一个非常简单的接口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&lt;Example.IInput&gt; 转换为&lt;Example.IInput&gt;。 我看不出我做错了什么。请帮帮我

【问题讨论】:

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


    【解决方案1】:

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

       var x = new FirstClass(mock.Object);
    

    在 Moq 框架中,Mock 不是您正在模拟的实例(就像在 Rhino Mocks 中一样)。

    【讨论】:

    • 谢谢。您刚刚指出了我的问题:我被 Rhino Mocks 的经历“污染”了 :-)
    • @Morten 那是因为我从 Rhino 切换到 Moq 时遇到了同样的问题 :)
    【解决方案2】:

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

    var x = new FirstClass(mock.Object);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 2011-06-05
      相关资源
      最近更新 更多