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

如何Mock自定义对象列表并配置返回指定真实实例

模拟包含真实实例的IList对象

要让Moq创建的IList<IValidatableTable> Mock实例返回你的真实ValidatableTable对象,需要手动配置IList接口的核心成员(比如索引器、Count属性、枚举器),以下是具体实现:

完整示例代码

// 1. 创建并配置真实实例
var validatableTable = new ValidatableTable();
// 这里添加你的对象配置逻辑,比如设置属性等

// 2. 创建IList的Mock实例
var myMock = new Mock<IList<IValidatableTable>>();

// 3. 设置Count属性,返回列表中元素的数量(这里是1)
myMock.SetupGet(x => x.Count).Returns(1);

// 4. 设置索引器:当访问索引0时返回真实实例,其他索引抛出标准异常
myMock.Setup(x => x[It.IsAny<int>()])
      .Returns((int index) => 
          index == 0 ? validatableTable : throw new IndexOutOfRangeException());

// 5. 如果代码中需要遍历列表,配置枚举器返回包含真实实例的枚举器
var backingList = new List<IValidatableTable> { validatableTable };
myMock.Setup(x => x.GetEnumerator()).Returns(backingList.GetEnumerator());

// 可选:如果需要用到Contains方法,可额外配置
myMock.Setup(x => x.Contains(validatableTable)).Returns(true);

关键说明

  • IList是一个接口,Moq不会自动实现集合的默认行为,必须手动设置测试场景需要用到的成员。
  • 若仅需访问索引0和Count属性,步骤3、4即可满足需求;若代码会遍历列表(比如foreach循环),则必须配置GetEnumerator。
  • 对于其他IList方法(如Add、Remove),如果测试场景需要用到,可按类似方式用Setup配置对应行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:36:23