独立进程模式Durable Orchestrator单元测试求助(xUnit&Moq)
独立进程模式下Durable Orchestrator单元测试方案(xUnit + Moq)
针对你的独立进程(Isolated Proc)Durable Orchestrator,以下是具体的单元测试实现步骤:
1. 安装必要的NuGet包
确保测试项目中包含以下包:
xunitMoqMicrosoft.Azure.Functions.Worker.DurableTaskMicrosoft.NET.Test.Sdk
2. 编写单元测试代码
using Xunit; using Moq; using Microsoft.Azure.Functions.Worker.DurableTask; using System.Collections.Generic; using System.Threading.Tasks; public class ESLDailyImportOrchestratorTests { [Fact] public async Task ESLDailyImportOrchestrator_Should_Return_Correct_CorrelationId_Message() { // 准备测试数据 var mockBatch = new List<VusionItemRequestModel> { new VusionItemRequestModel { /* 填充测试属性 */ }, new VusionItemRequestModel { /* 填充测试属性 */ } }; const string mockCorrelationId = "TEST-CORRELATION-ID-123"; // Mock TaskOrchestrationContext接口 var mockContext = new Mock<TaskOrchestrationContext>(); // 模拟第一个Activity调用:ImportItemsActivity,参数50,返回mockBatch mockContext.Setup(c => c.CallActivityAsync<List<VusionItemRequestModel>>( nameof(ImportItemsActivity), It.Is<int>(num => num == 50), default)) .ReturnsAsync(mockBatch); // 模拟第二个Activity调用:ProcessDailyESLImport,参数mockBatch,返回mockCorrelationId mockContext.Setup(c => c.CallActivityAsync<string>( nameof(ProcessDailyESLImport), It.Is<List<VusionItemRequestModel>>(batch => batch == mockBatch), default)) .ReturnsAsync(mockCorrelationId); // 实例化编排函数并执行 var orchestrator = new YourOrchestratorClass(); // 替换为你的实际类名 var result = await orchestrator.ESLDailyImportOrchestrator(mockContext.Object); // 断言验证 Assert.Equal($"Processed batches with these CorrelationIds {mockCorrelationId}.", result); // 验证两次Activity调用是否被正确触发 mockContext.Verify(c => c.CallActivityAsync<List<VusionItemRequestModel>>( nameof(ImportItemsActivity), 50, default), Times.Once); mockContext.Verify(c => c.CallActivityAsync<string>( nameof(ProcessDailyESLImport), mockBatch, default), Times.Once); } }
关键说明
- 独立进程模式下,
TaskOrchestrationContext是接口而非抽象类,因此可以直接用Moq进行Mock。 - 需要为两次
CallActivityAsync泛型方法分别设置返回值,匹配对应的Activity名称和参数。 - 除了断言返回结果,还可以验证Activity调用的次数和参数,确保编排逻辑符合预期。
内容的提问来源于stack exchange,提问作者Shabir jan
相关产品推荐
相关产品推荐

