gpt4 book ai didi

azure - 持久的 Azure Functions 和集成测试

转载 作者:行者123 更新时间:2023-12-04 11:33:41 31 4
gpt4 key购买 nike

我正在尝试使用 SpecFlow 和 MSTest 测试(集成测试)我的 Azure Durable Function v3。

函数通过 DI 和 Startup 类进行初始化:

[assembly: FunctionsStartup(typeof(Startup))]
namespace MyNamespace.Functions
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
ConfigureServices(builder.Services);
}
...

Orchestrator 入口点由 HTTP 端点触发:

public class Function1
{
[FunctionName(nameof(Function1))]
public async Task<IActionResult> DoYourJob(
[HttpTrigger(AuthorizationLevel.Anonymous, methods: "post", Route = "api/routes/function1")] HttpRequestMessage httpRequest,
[DurableClient] IDurableOrchestrationClient starter)
{
...

我的 IntegrationTest 构造函数使用 HostBuilder 初始化 Az Function(感谢此 article ):

[Binding]
public sealed class Function1StepDefinitions
{
private readonly IHost _host;
private readonly Function1 _function;

public Function1StepDefinitions()
{
var startup = new MyNamespace.Functions.Startup();
_host = new HostBuilder()
.ConfigureWebJobs(config =>
{
config.AddDurableTask(options =>
{
options.HubName = "MyTaskHub";
});

startup.Configure(config);
})
.ConfigureServices(ReplaceTestOverrides) // Method to replace/mock some external services
.Build();

_function = new Function1(Host.Services.GetRequiredService<IOptions..., ..);

在我的测试中,我不知道如何检索 IDurableOrchestrationClient 来调用我的 HTTP 触发器:

    [When(@"I call my function")]
public async Task WhenICallMyFunction()
{
var request = new HttpRequestMessage();

await _function.DoYourJob(
request,
Host.Services.GetService<IDurableOrchestrationClient>()); // This is always null
...

有没有办法检索此 IDurableOrchestrationClient 并测试我的整个函数(使用 Orchestrator 和事件调用)?

最佳答案

看起来有一个IDurableClientFactory,您可以根据 this code 注入(inject)它。 .

使用它,您可以创建一个要使用的客户端,如 this sample 中所示。 .

关于azure - 持久的 Azure Functions 和集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65290339/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com