簡體   English   中英

使用外部事件對 C# Azure 耐用 Function 進行單元測試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM