[英]Unit testing an C# Azure Durable Function with external events
我有一個 Azure 耐用 Function 協調器,它等待兩個外部事件。 一旦它們都被接收到,編排器調用一個活動 function。
有沒有辦法對這個協調器進行單元測試,以驗證只有在收到兩個事件后才調用活動 function?
這是編排器 function 代碼:
[FunctionName("MyOrchestrator")]
public static async Task MyOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
var event1 = context.WaitForExternalEvent<string>("Event1");
var event2 = context.WaitForExternalEvent<string>("Event2");
await Task.WhenAll(event1, event2);
await context.CallActivityAsync<object>("Activity1", null);
context.SetOutput(new { Status = "Complete" });
}
如果模擬上下文安排得當,那么活動只能在等待兩個外部事件任務完成后發生。
//Arrange
var context = new Mock<IDurableOrchestrationContext>(); //MOQ
context.Setup(_ => _.WaitForExternalEvent<string>(It.IsAny<string>()))
.Returns(async () => {
await Task.Delay(10); //Delay is optional
return "";
});
context.Setup(_ => _.CallActivityAsync<object>(It.IsAny<string>(), It.IsAny<object>()))
.ReturnsAsync(null);
//Act
await MyFunction.MyOrchestrator(context.Object);
//Assert
context.Verify(_ => _.WaitForExternalEvent<string>("Event1"));
context.Verify(_ => _.WaitForExternalEvent<string>("Event2"));
context.Verify(_ => _.CallActivityAsync<object>("Activity1", null));
context.Verify(_ => _.SetOutput(It.IsAny<object>()));
在上面的示例中,使用 MOQ,事件通常設置為在完成任務之前延遲。 只有這樣才能調用活動。
然后測試驗證特定的調用以斷言預期的行為。
至於這個單元測試有多大用處,不是很有用,因為它基本上是在測試框架代碼是否按預期等待。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.