@Before
 public void before() {
   when(configuration.getConfig(CorePlugin.class)).thenReturn(corePlugin);
   StageMonitor.reset();
   StageMonitor.setConfiguration(configuration);
   StageMonitor.setLogger(logger);
   assertFalse(StageMonitor.isStarted());
   assertTrue(StageMonitor.getMeasurementSession().isNull());
 }
  @Test
  public void testStartMonitoringNotActive() throws Exception {
    when(corePlugin.isStagemonitorActive()).thenReturn(false);
    StageMonitor.setConfiguration(configuration);

    final MeasurementSession measurementSession =
        new MeasurementSession("testApp", "testHost", "testInstance");
    StageMonitor.startMonitoring(measurementSession);

    assertTrue(StageMonitor.isStarted());
    assertFalse(StageMonitor.getMeasurementSession().isInitialized());
    verify(logger, times(0)).info("Initializing plugin {}", "TestPlugin");
    verify(logger, times(0)).info("Initializing plugin {}", "TestExceptionPlugin");
  }
  @Test
  public void testStartMonitoring() throws Exception {
    when(corePlugin.isStagemonitorActive()).thenReturn(true);

    final MeasurementSession measurementSession =
        new MeasurementSession("testApp", "testHost", "testInstance");
    StageMonitor.startMonitoring(measurementSession);
    StageMonitor.startMonitoring(new MeasurementSession("testApp2", "testHost2", "testInstance2"));

    assertTrue(StageMonitor.isStarted());
    assertTrue(StageMonitor.getMeasurementSession().isInitialized());
    assertSame(measurementSession, StageMonitor.getMeasurementSession());
    verify(logger).info("Initializing plugin {}", "TestPlugin");
    verify(logger).info("Initializing plugin {}", "TestExceptionPlugin");
  }