我正在尝试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>
。
我看不出我做错了什么。请帮帮我
答案 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中的说明)。