- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这几天我刚开始写一些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)的博文:
关于c# - 如何为 C# Azure Function 编写单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49137804/
我是一名优秀的程序员,十分优秀!