won*_*rld 0 unit-testing azure-servicebus-queues azure-functions
我有一个由Azure Service Bus Queue触发的 Azure 函数。
功能如下。
AddContact触发器开始、检查方法中的逻辑以及使用输出绑定发送到 blob 的数据来完成集成测试? public static class AddContactFunction
{
[FunctionName("AddContactFunction")]
public static void Run([ServiceBusTrigger("AddContact", Connection = "AddContactFunctionConnectionString")]string myQueueItem, ILogger log)
{
log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
}
}
Run Code Online (Sandbox Code Playgroud)
我也有同样的疑问。添加单元测试并不太复杂,归根结底,它是一个函数,所以我们要做的就是使用正确的字符串调用 Azure 函数,作为参数string myQueueItem。
添加集成测试需要一些额外的基础工作。在Github上项目,笔者采用了TestFunctionHost从类天青/ Azure的功能主机项目。
我尝试遵循此策略,但设置所有这些所需的代码量对我而言高得令人不舒服。没有很多文档被很好地记录下来,其中一些内容需要开发人员使用Azure App Services myGet feed。
我想要一种更简单的方法,幸好我找到了一个。Azure Functions 构建在Azure WebJobs SDK 包之上,并利用其JobHost类来运行。因此,在我们的集成测试中,我们需要做的就是设置此主机,并告诉它在何处查找要加载和运行的 Azure 函数。
IHost host = new HostBuilder()
.ConfigureWebJobs()
.ConfigureDefaultTestHost<CLASS_CONTAINING_THE_AZURE_FUNCTIONS>(webjobsBuilder => {
webjobsBuilder.AddAzureStorage();
webjobsBuilder.AddServiceBus();
})
.ConfigureServices(services => {
services.AddSingleton<INameResolver>(resolver);
})
.Build();
using (host) {
await host.StartAsync();
// ..
}
...
Run Code Online (Sandbox Code Playgroud)
完成此操作后,我们可以向 ServiceBus 发送消息,我们的 Azure Functions 将被触发。一次甚至可以在测试和调试问题的函数中设置断点!
我已经在这里写了关于整个过程的博客,我还在这个链接上创建了一个 github 存储库,以展示使用 Azure Functions 的测试驱动开发。
| 归档时间: |
|
| 查看次数: |
2235 次 |
| 最近记录: |