title: Using Application Insights with Unit Tests?
body: <p>I have an MVC web app, and I'm using Simple Injector for DI.  Almost all my code is covered by unit tests.  However, now that I've added some telemetry calls in some controllers, I'm having trouble setting up the dependencies.</p>
  
  <p>The telemetry calls are for sending metrics to the Microsoft Azure-hosted Application Insights service.  The app is not running in Azure, just a server with ISS. The AI portal tells you all kinds of things about your application, including any custom events you send using the telemetry library.  As a result, the controller requires an instance of Microsoft.ApplicationInsights.TelemetryClient, which has no Interface and is a sealed class, with 2 constructors.  I tried registering it like so (the hybrid lifestyle is unrelated to this question, I just included it for completeness):</p>
  
  <pre><code>// hybrid lifestyle that gives precedence to web api request scope
  var requestOrTransientLifestyle = Lifestyle.CreateHybrid(
      () =&gt; HttpContext.Current != null,
      new WebRequestLifestyle(),
      Lifestyle.Transient);
  
  container.Register&lt;TelemetryClient&gt;(requestOrTransientLifestyle);
  </code></pre>
  
  <p>The problem is that since TelemetryClient has 2 constructors, SI complains and fails validation.  I found a post showing how to override the container's constructor resolution behavior, but that seems pretty complicated. First I wanted to back up and ask this question:</p>
  
  <p>If I don't make the TelemetryClient an injected dependency (just create a New one in the class), will that telemetry get sent to Azure on every run of the unit test, creating lots of false data?  Or is Application Insights smart enough to know it is running in a unit test, and not send the data?</p>
  
  <p>Any "Insights" into this issue would be much appreciated!</p>
  
  <p>Thanks</p>