将Moq模拟对象传递给构造函数

我一直在使用RhinoMocks,但刚开始研究Moq。 我有这个非常基本的问题,而且让我感到惊讶的是,这个问题并没有立即开始。 假设我有以下的类定义:

public class Foo { private IBar _bar; public Foo(IBar bar) { _bar = bar; } .. } 

现在我有一个testing,我需要模拟发送给Foo的IBar。 在RhinoMocks中,我只是简单地按照下面的方式来做,而且它会工作得很好:

 var mock = MockRepository.GenerateMock<IBar>(); var foo = new Foo(mock); 

然而,在Moq这似乎并没有以同样的方式工作。 我正在做如下:

 var mock = new Mock<IBar>(); var foo = new Foo(mock); 

然而,现在它失败了 – 告诉我“不能从'Moq.Mock'转换为'IBar'。我在做什么错了?Moq的推荐方式是什么?

您需要传递模拟的对象实例

 var mock = new Mock<IBar>(); var foo = new Foo(mock.Object); 

您也可以使用模拟对象来访问实例的方法。

 mock.Object.GetFoo(); 

moq文档

 var mock = new Mock<IBar>().Object