gpt4 book ai didi

azure - 测试 Azure Functions 时如何调用ConfigureAppConfiguration

转载 作者:行者123 更新时间:2023-12-02 23:12:36 25 4
gpt4 key购买 nike

我们最近将 Azure 应用程序配置添加到 Azure Functions 中,现在我们希望通过测试触发应用程序配置的启动代码。

我们的函数启动代码如下所示 -

    public override void Configure(IFunctionsHostBuilder builder)
{
config = Utils.LoadConfig();
StartupHelper.AddCommonIoCDependencies(builder);
}

public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
//How do we trigger this method when testing???
StartupHelper.AddAzureAppConfiguration(builder);
}

使用以下命令运行测试时会触发初始配置方法 -

    private MyFunction_sut;

[SetUp]
public void Setup()
{
var funcStartup = new Startup();

var host = new HostBuilder()
.ConfigureWebJobs(funcStartup.Configure)
.Build();

_sut = new MyFunction(...);
}

这适用于触发 Congfigure 方法。尽管 HostBuilder 有 ConfigureAppConfiguration 选项,但我不知道如何让它工作。我觉得应该有一种快速而简单的方法来处理我在下面列出的内容。

            var host = new HostBuilder()
.ConfigureWebJobs(funcStartup.Configure)
.ConfigureAppConfiguration(x => {
//What do I put here to call trigger the ConfigureAppConfiguration method at startup?
//Or is it possible to call my helper "AddAzureAppConfiguration" method that is in a static class?
})
.Build();

如果有一种不同的方法来测试 Azure Functions 以添加到 Azure 应用程序配置中,并且不涉及 HosatBuilder,那么我很想听听其他人的方法。在网上搜索时我真的看不到太多相关内容,所以我觉得我错过了一些东西。

如有任何建议,我们将不胜感激!

最佳答案

我需要做类似的事情。不幸的是,完成此操作所需的 IFunctionsConfigurationBuilder 的实现被标记为“内部”,因此我必须自己复制该实现。值得庆幸的是,它很简单。

// https://github.com/Azure/azure-functions-dotnet-extensions/blob/main/src/Extensions/DependencyInjection/FunctionsConfigurationBuilder.cs
internal class FunctionsConfigurationBuilder : IFunctionsConfigurationBuilder
{
public FunctionsConfigurationBuilder(IConfigurationBuilder configurationBuilder, WebJobsBuilderContext webJobsBuilderContext)
{
ConfigurationBuilder = configurationBuilder ?? throw new ArgumentNullException(nameof(configurationBuilder));
Context = new DefaultFunctionsHostBuilderContext(webJobsBuilderContext);
}

public IConfigurationBuilder ConfigurationBuilder { get; }

public FunctionsHostBuilderContext Context { get; }
}

// https://github.com/Azure/azure-functions-dotnet-extensions/blob/main/src/Extensions/DependencyInjection/DefaultFunctionsHostBuilderContext.cs
internal class DefaultFunctionsHostBuilderContext : FunctionsHostBuilderContext
{
public DefaultFunctionsHostBuilderContext(WebJobsBuilderContext webJobsBuilderContext)
: base(webJobsBuilderContext)
{
}
}

这允许我像这样设置我的测试:

public TestHost()
{
var webJobsBuilderContext = new WebJobsBuilderContext();
var startup = new TestStartup();
var host = new HostBuilder()
.ConfigureAppConfiguration((context, builder) =>
startup.ConfigureAppConfiguration(new FunctionsConfigurationBuilder(builder, webJobsBuilderContext))
)
.ConfigureWebJobs((context, builder) =>
{
webJobsBuilderContext.Configuration = context.Configuration;
startup.Configure(webJobsBuilderContext, builder);
})
.Build();

ServiceProvider = host.Services;
}

public IServiceProvider ServiceProvider { get; }

我的测试的启动如下所示:

private class TestStartup : Startup
{
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
// Do anything else you need to here
base.ConfigureAppConfiguration(builder);
}

public void Configure(WebJobsBuilderContext context, IWebJobsBuilder builder)
{
// Do anything else you need to here
base.Configure(context, builder);
}
}

差不多就这些了。如果需要更多详细信息,请告诉我。不幸的是,这并不简单。

关于azure - 测试 Azure Functions 时如何调用ConfigureAppConfiguration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67770866/

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