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

使用SetupGet模拟C#索引器失败,DummyChildren模拟未生效求助

问题分析与解决方案

错误原因

  1. 类型混淆:你创建的mockDummyChildren是Mock<IDummy>类型,但IDummy.DummyChildren属性返回的是IDummyList接口,需要模拟的是IDummyList而非IDummy来处理索引器逻辑。
  2. 关联缺失:你没有将模拟的IDummyList实例绑定到mockDummy的DummyChildren只读属性上,导致原IDummy对象的DummyChildren无法获取到期望的索引器行为。
  3. 拼写错误:代码中的.Return()应为.Returns()(Moq框架的正确方法名)。

正确实现代码

// 模拟目标IDummy实例
Mock<IDummy> mockDummy = new Mock<IDummy> { DefaultValue = DefaultValue.Mock };
mockDummy.SetupGet(x => x.Name).Returns("XYZ");

// 模拟IDummyList实例,处理索引器逻辑
Mock<IDummyList> mockDummyList = new Mock<IDummyList>();
// 设置索引器"ABC"返回指定的mockDummy实例
mockDummyList.Setup(x => x["ABC"]).Returns(mockDummy.Object);

// 将模拟的IDummyList绑定到mockDummy的DummyChildren属性
mockDummy.SetupGet(x => x.DummyChildren).Returns(mockDummyList.Object);

// 验证使用示例:
var dummy = mockDummy.Object;
Console.WriteLine(dummy.Name); // 输出"XYZ"
Console.WriteLine(dummy.DummyChildren["ABC"].Name); // 输出"XYZ"

关键说明

  • 对于只读属性DummyChildren,需通过SetupGet指定其返回值,也就是预先模拟好的IDummyList实例。
  • 索引器的模拟直接针对IDummyList的this[string]成员,无需通过IDummy的属性链设置,避免类型层级混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:40:09