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

独立进程模式Durable Orchestrator单元测试求助(xUnit&Moq)

独立进程模式下Durable Orchestrator单元测试方案(xUnit + Moq)

针对你的独立进程(Isolated Proc)Durable Orchestrator,以下是具体的单元测试实现步骤:

1. 安装必要的NuGet包

确保测试项目中包含以下包:

  • xunit
  • Moq
  • Microsoft.Azure.Functions.Worker.DurableTask
  • Microsoft.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:25:05