我使用RhinoMock已经有一段时间了,但我才刚刚开始研究Moq.我有一个非常基本的问题,让我惊讶的是这不是开箱即用的飞翔.假设我有以下类定义:

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

现在我有一个测试,我需要模拟发送到foo的ibar.在RhinoMock中,我只需如下所示,它将非常有效:

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对象访问实例的方法.

mock.Object.GetFoo();

moq docs

.net相关问答推荐

为什么.Net 8.0.100是预览版?

从窗体中移除另一个控件中引用的控件时获取设计时通知

如何从 tshark 的 stderr 捕获实时数据包计数?

IIS 发布 ASP.NET Core 应用程序而不关闭 IIS 网站

部署时如何控制红隼端口?

我应该创建一个 DateRange 对象吗?

在 C# 中将字符串转换为 colored颜色

有没有办法以编程方式最小化窗口

具有透明背景且包含不透明控件的 WPF 窗口

OpenCV的.Net(dotNet)包装器?

什么是编组?当某些东西被编组时会发生什么?

读取方法的属性值

将 C# 编译为本机?

如何在 C# 中仅设置 DateTime 变量的时间部分

向 .NET 应用程序添加脚本功能

我不了解应用程序域

有没有办法从方法返回匿名类型?

是否可以完全用托管的 .NET 语言编写 JIT 编译器(本地代码)

记录器包装器最佳实践

检测到包降级警告(dotnet core,vs 2017)