gpt4 book ai didi

c# - 如何为 C# Azure Function 编写单元测试?

转载 作者:行者123 更新时间:2023-11-30 15:16:34 24 4
gpt4 key购买 nike

这几天我刚开始写一些C#函数代码,我必须使用Application Insight(AI)发送跟踪事件。这是我编写的示例代码。

namespace BlobTrigger {
public static class Main {
private static string sKey = TelemetryConfiguration.Active.InstrumentationKey = System.Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", EnvironmentVariableTarget.Process);
private static TelemetryClient sTelemetry;
[FunctionName("BlobTrigger")]
public static void Run(
[BlobTrigger("upload/{name}.wav")] Stream myBlob,
string name,
Microsoft.Azure.WebJobs.ExecutionContext context,
TraceWriter log) {

sTelemetry = new TelemetryClient() { InstrumentationKey = sKey };
sTelemetry.Context.Operation.Id = context.InvocationId.ToString();
sTelemetry.Context.Operation.Name = name;
sTelemetry.TrackEvent("File is uploaded");
.....
}
}

这个函数工作正常。但我的问题是为此编写一些单元测试。我为 Run 方法的四个参数创建了一些模拟类,并且已经覆盖了它的方法。这很容易。但我不知道如何模拟 TelemetryClient#TrackEvent 因为我在 Run 方法中新建了那个实例。

我看到下面的页面为此使用了 DI,但我不明白如何正确编写单元测试。

Using Application Insights with Unit Tests?

那么你能给我看看这个的示例单元测试代码吗?

最佳答案

首先,Azure Functions 支持开箱即用的 Application Insights。

Azure Functions now has direct integration with Application Insights

因此,我不建议您在代码中直接实现 TelemetryClient。相反,将 TraceWriter 参数替换为 ILogger 以从 Application Insights 中获益。

但是,如果您真的想在代码中使用 TelemetryClient,我建议创建一个包装器接口(interface),如 ITelemetryClientWrapper,实现它并通过依赖注入(inject)注入(inject)它方法。

我写了一篇关于 Azure Functions 依赖注入(inject)的博文:

Azure Functions with IoC Container

关于c# - 如何为 C# Azure Function 编写单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49137804/

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