You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中配置方法的out参数以返回Mock对象

Moq配置含out参数的方法以返回Mock对象

要让Mock对象的方法通过out参数返回指定的Mock实例(后续可继续配置),需使用Moq提供的Out.Ref或It.Ref来处理out参数,以下是正确实现方式:

正确代码示例

方式一:通过Callback指定out参数返回值

// 提前创建要返回的Mock实例(后续可继续配置它)
var randomObjectMock = new Mock<ISmth>(MockBehavior.Strict);

// 声明与方法out参数类型匹配的变量
ISmth outInstance;

// 配置目标方法,通过Callback设置out参数的返回值为Mock的实例
mock.Setup(x => x.DoSomething(out outInstance))
    .Callback(() => outInstance = randomObjectMock.Object);

方式二:直接使用It.Ref简化写法

var randomObjectMock = new Mock<ISmth>(MockBehavior.Strict);

// 直接在Setup中通过It.Ref匹配out参数,并在Callback中赋值
mock.Setup(x => x.DoSomething(out It.Ref<ISmth>.IsAny))
    .Callback((out ISmth obj) => obj = randomObjectMock.Object);

原有尝试失败的原因

  • 第一种写法:直接将Mock<ISmth>实例传入out参数,与方法定义的ISmth类型不匹配,编译报错。
  • 第二种写法:错误地将Mock<ISmth>赋值给ISmth类型的out变量,未使用.Object属性获取实际接口实例。
  • 第三种写法:声明的变量类型是Mock<ISmth>,但方法的out参数类型应为ISmth,类型不匹配导致失败。

配置完成后,你可以正常对randomObjectMock进行后续的Setup、Verify等操作,当调用DoSomething方法时,out参数会返回该Mock的实例。

内容的提问来源于stack exchange,提问作者Kirill Topchy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:40:36