【问题标题】:Mock Microsoft Application Insights API模拟 Microsoft Application Insights API
【发布时间】:2017-04-05 07:06:14
【问题描述】:

我有一个应用程序,它使用 custom traces/metrics 写入 App INsights,并使用 REST API 将数据读取到仪表板上。 我的问题是关于我的单元测试,我可以同时模拟自定义跟踪(TelemetryClient)和 REST API 吗?

我看到 REST API 有一个 DEMO 版本,但提供了随机信息。如果我可以设置一个 DEMO 检测密钥来写入和读取它以进行单元测试,那将很有帮助。告诉我。

【问题讨论】:

    标签: unit-testing azure mocking azure-application-insights


    【解决方案1】:

    我提供的方法是(对于任何外部组件)围绕 Telemetry Client 创建某种包装器,然后可以很容易地模拟它或稍后在需要时替换它。

    我会尝试的另一种方法是将TelemetryClient 构造函数重载与TelemetryConfiguration 和模拟TelemetryChannel 一起使用。

    var client = new TelemetryClient(
        new TelemetryConfiguration
        {                   
             TelemetryChannel = new MOCK...
        });
    

    【讨论】:

      【解决方案2】:

      Application Insights 有一个 example 模拟 TelemetryClient 使用 StubTelemetryChannel

      var configuration = new TelemetryConfiguration();
      this.sendItems = new List<ITelemetry>();
      configuration.TelemetryChannel = new StubTelemetryChannel { OnSend = item => this.sendItems.Add(item) };
      configuration.InstrumentationKey = Guid.NewGuid().ToString();
      configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
      this.telemetryClient = new TelemetryClient(configuration);
      

      【讨论】:

        【解决方案3】:

        与其模拟事物,不如按照您的第二个想法实际创建另一个应用程序洞察资源,并在单元测试中使用该资源的检测密钥。 a blog post with information about using multiple environments 应该会指引你朝着正确的方向前进。

        我建议您甚至对开发人员/调试版本也执行类似的操作,这样只有您的“生产”遥测数据会发送到您的真实实例,然后所有开发/测试遥测数据都会发送到另一个资源。

        【讨论】:

        • 是的,旋转键是个好主意,唯一阻碍自动化测试的真正应用程序是“读取写入” - 由于开发人员模式下的写入延迟也很不方便(大约分钟或 2)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-14
        • 2016-05-05
        • 1970-01-01
        • 1970-01-01
        • 2018-08-27
        • 1970-01-01
        相关资源
        最近更新 更多