微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为 Azure Durable Functions 中的编排函数编写单元测试

如何解决为 Azure Durable Functions 中的编排函数编写单元测试

我正在尝试学习如何为持久函数编写单元测试。这是我的代码

    [FunctionName("orchestratorFunction")]
    public async Task Runorchestrator([orchestrationTrigger] IDurableorchestrationContext context)
    {
            var jobs = await context.CallActivityAsync<List<Job>>("JobsReaderFunction"),null);
            if (jobs != null && jobs .Count > 0)
            {
                var processingTasks = new List<Task>();
                foreach (var job in jobs)
                {                    
                    Task processtask = context.CallSuborchestratorAsync("SuborchestratorFunction"),job);
                    processingTasks.Add(processtask);
                }
                await Task.WhenAll(processingTasks);               
            }
    }

    [FunctionName("SuborchestratorFunction")]
    public async Task RunSuborchestrator([orchestrationTrigger] IDurableorchestrationContext context)        
    {
            var job = context.GetInput<Job>();
            var group = await context.CallActivityAsync<Group>("GroupReaderFunction"),job);
            await context.CallActivityAsync("EmailSenderFunction",group);
            var canWritetoGroup = await context.CallActivityAsync<bool>("GroupVerifierFunction",job);            
            await context.CallActivityAsync("JobStatusUpdaterFunction",new JopStatusUpdaterRequest { CanWritetoGroup = canWritetoGroup,Job = job });
            await context.CallActivityAsync("TopicmessageSenderFunction",job);
    }    

如何编写涵盖 orchestrator、Suborchestrator 和 Activity 功能的测试?请告诉我。

这是我目前的测试:

        [TestMethod]
        public async Task Verifyorchestrator()
        {            
            var jobs = <code to get jobs>
            var context = new Mock<IDurableorchestrationContext>();           
            context.Setup(m => m.CallActivityAsync<List<Job>>("JobsReaderFunction",It.IsAny<object>())).ReturnsAsync(jobs);
            await _orchestratorFunction.Runorchestrator(context.Object);
        }

更新:

我将测试方法更新为:

        [TestMethod]
        public async Task VerifyJobs()
        {            
            var jobs = <code to get jobs>
            var context = new Mock<IDurableorchestrationContext>();           
            context.Setup(x => x.CallSuborchestratorAsync("SuborchestratorFunction"),It.IsAny<object>())).Returns(() => _orchestratorFunction.RunSuborchestrator(context.Object));            
            await _orchestratorFunction.Runorchestrator(context.Object);
        }

这给了我一个错误

enter image description here

context.Setup(x => x.CallSuborchestratorAsync("SuborchestratorFunction",It.IsAny<object>())).Returns(async () => await It.IsAny<Task>());
await _orchestratorFunction.Runorchestrator(context.Object);
context.Verify(m => m.CallSuborchestratorAsync("SuborchestratorFunction",It.IsAny<string>(),It.IsAny<object>()),Times.Once);

上面给出了一个空异常。

解决方法

根据以下行模拟上下文:

var context = new Mock<IDurableOrchestrationContext>();           

这意味着当您执行 Context.CallSubOrchestratorAsync("SubOrchestratorFunction") moq search for setup 时。 因为该方法没有任何设置,所以它什么都不运行并返回默认返回值。

如果你想执行RunSubOrchestrator,你应该设置它:

context.Setup(x => x.CallSubOrchestratorAsync("SubOrchestratorFunction",It.IsAny<object>())).Returns(() => _orchestratorFunction.RunSubOrchestrator(context.Object))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?