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

使用xUnit与MOQ时,如何模拟被测方法内GetProgramPairings的返回值?

使用Moq模拟ProgramPage.GetProgramPairings返回指定结果

要模拟ProgramPage.GetProgramPairings()返回自定义的IEnumerable<ProgramPairing>结果,按照以下步骤操作即可:

1. 准备测试用的ProgramPairing数据集

先构造符合测试场景的ProgramPairing实例集合,比如为了验证排序逻辑,可包含不同日期的事件数据:

// 构造测试数据,包含不同日期的ProgramPairing实例
var testPairings = new List<ProgramPairing>
{
    new ProgramPairing { EventDate = new DateTime(2024, 6, 1) },
    new ProgramPairing { EventDate = new DateTime(2024, 5, 1) },
    new ProgramPairing { EventDate = new DateTime(2024, 7, 1) }
};

2. 用Moq创建ProgramPage的模拟对象并配置返回值

根据ProgramPage的类型(类或接口),分两种情况处理:

情况一:ProgramPage是类,且GetProgramPairings为虚方法

如果ProgramPage是普通类,需确保GetProgramPairings方法标记为virtual(Moq只能模拟虚方法):

// 创建ProgramPage的Moq实例
var mockProgramPage = new Mock<ProgramPage>();

// 配置:当调用GetProgramPairings时,返回我们准备好的测试数据
mockProgramPage.Setup(page => page.GetProgramPairings())
               .Returns(testPairings.AsEnumerable());

情况二:ProgramPage是接口(如IProgramPage)

如果ProgramPage基于接口定义,直接模拟接口即可,无需考虑方法是否为虚:

var mockProgramPage = new Mock<IProgramPage>();
mockProgramPage.Setup(page => page.GetProgramPairings())
               .Returns(testPairings.AsEnumerable());

3. 将模拟对象传入被测方法并执行测试

把配置好的模拟ProgramPage实例传入被测的Create方法,同时确保测试上下文满足触发排序的条件(context.IsSortedByDate = true):

// 构造测试上下文,设置IsSortedByDate为true以触发排序逻辑
var testContext = new FeedContext { IsSortedByDate = true };

// 调用被测的Create方法
var result = YourTestTargetClass.Create(testContext, mockProgramPage.Object);

// 断言结果(示例:验证页面是否按EventDate升序排列)
var sortedDates = result.Pages.SelectMany(p => p.GetProgramPairings())
                              .Select(p => p.EventDate)
                              .ToList();
Assert.Equal(new List<DateTime> { new DateTime(2024,5,1), new DateTime(2024,6,1), new DateTime(2024,7,1) }, sortedDates);

关键注意点

  • 若ProgramPage是类,GetProgramPairings必须是virtual方法,否则Moq无法拦截并替换返回值。
  • 测试数据要覆盖排序的核心场景(如包含早、中、晚不同日期的实例),确保能有效验证排序逻辑。
  • 若被测方法并非直接接收ProgramPage参数,而是从依赖的仓储/服务获取,需同时模拟该依赖,让它返回我们配置好的mockProgramPage.Object。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:21:47