Verwenden Sie Application Insights mit Unit Tests?

Ich habe eine MVC-Web-App und verwende Simple Injector for DI. Fast mein gesamter Code wird durch Unit-Tests abgedeckt. Nachdem ich jedoch einige Telemetrieaufrufe in einigen Controllern hinzugefügt habe, habe ich Probleme, die Abhängigkeiten einzurichten.

Die Telemetrieaufrufe dienen zum Senden von Metriken an den von Microsoft Azure gehosteten Application Insights-Dienst. Die App wird nicht in Azure ausgeführt, sondern nur auf einem Server mit ISS. Das AI-Portal informiert Sie über alles Mögliche über Ihre Anwendung, einschließlich aller benutzerdefinierten Ereignisse, die Sie mithilfe der Telemetriebibliothek senden. Daher benötigt der Controller eine Instanz von Microsoft.ApplicationInsights.TelemetryClient, die keine Schnittstelle hat und eine versiegelte Klasse mit zwei Konstruktoren ist. Ich habe versucht, es so zu registrieren (der hybride Lebensstil hat nichts mit dieser Frage zu tun, ich habe es nur der Vollständigkeit halber aufgenommen):

      // hybrid lifestyle that gives precedence to web api request scope
        var requestOrTransientLifestyle = Lifestyle.CreateHybrid(
            () => HttpContext.Current != null,
            new WebRequestLifestyle(),
            Lifestyle.Transient);

       container.Register<TelemetryClient>(requestOrTransientLifestyle);

Das Problem ist, dass SI sich beschwert und die Validierung fehlschlägt, da TelemetryClient 2 Konstruktoren hat. Ich habe einen Beitrag gefunden, der zeigt, wie das Konstruktorauflösungsverhalten des Containers außer Kraft gesetzt werden kann, aber das scheint ziemlich kompliziert zu sein. Zuerst wollte ich mich sichern und diese Frage stellen:

Wenn ich den TelemetryClient nicht zu einer injizierten Abhängigkeit mache (erstelle einfach eine neue in der Klasse), wird diese Telemetrie bei jeder Ausführung des Komponententests an Azure gesendet, wodurch viele falsche Daten erstellt werden? Oder ist Application Insights intelligent genug, um zu wissen, dass es in einem Komponententest ausgeführt wird, und die Daten nicht zu senden?

Alle "Einblicke" in diese Ausgabe wären sehr dankbar!

Vielen Dan

Antworten auf die Frage(10)

Ihre Antwort auf die Frage