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

单元测试Mock DurableTaskClient:ScheduleNewOrchestrationInstanceAsync配置报错

解决Durable Function单元测试中Mock DurableTaskClient的ScheduleNewOrchestrationInstanceAsync报错问题

1. 修复基础语法错误

你第一个Mock配置语句里,参数functionName和It.IsAny<object>()之间缺少逗号,这是直接导致编译报错的原因。修正后的代码:

durableClientMock.Setup(x => x.ScheduleNewOrchestrationInstanceAsync(functionName, It.IsAny<object>()))
    .ReturnsAsync(instanceId);

2. 匹配正确的方法重载

ScheduleNewOrchestrationInstanceAsync有多个重载版本,需要确保Mock的重载和业务代码实际调用的完全一致。比如如果业务代码是传入函数名和请求对象,要确认参数类型、数量都匹配:

// 假设业务代码调用的是接收string和HttpRequestData的重载
durableClientMock.Setup(client => client.ScheduleNewOrchestrationInstanceAsync(
        It.IsAny<string>(), 
        It.IsAny<HttpRequestData>()))
    .ReturnsAsync("instanceId123");

3. 优先使用IDurableClient接口Mock

DurableTaskClient是具体类,Mock时可能受限于类的非虚方法等限制。推荐依赖注入IDurableClient抽象接口,这会让单元测试更灵活,符合依赖倒置原则:

// 替换为IDurableClient的Mock
var durableClientMock = new Mock<IDurableClient>();

// 根据业务代码实际调用的重载配置
durableClientMock.Setup(x => x.ScheduleNewOrchestrationInstanceAsync(
        It.IsAny<string>(), 
        It.IsAny<object>()))
    .ReturnsAsync(instanceId);

4. 验证方法调用(可选)

如果需要确认Mock的方法是否被正确触发,可以在Assert阶段添加验证逻辑:

durableClientMock.Verify(x => x.ScheduleNewOrchestrationInstanceAsync(
        functionName, 
        It.IsAny<object>()), 
    Times.Once); // 验证方法被调用一次

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:43:29