如何解决为 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);
}
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 举报,一经查实,本站将立刻删除。