@Test
  public void testChangeLevel() {
    LoggingHandler loggingHandler = new LoggingHandler(Level.INFO);
    loggingHandler.setBeanFactory(mock(BeanFactory.class));
    loggingHandler.afterPropertiesSet();

    DirectFieldAccessor accessor = new DirectFieldAccessor(loggingHandler);
    Log log = (Log) accessor.getPropertyValue("messageLogger");
    log = spy(log);
    accessor.setPropertyValue("messageLogger", log);
    when(log.isInfoEnabled()).thenReturn(true);
    loggingHandler.handleMessage(new GenericMessage<>("foo"));
    verify(log, times(1)).info(Mockito.anyString());
    verify(log, never()).warn(Mockito.anyString());

    loggingHandler.setLevel(Level.WARN);
    loggingHandler.handleMessage(new GenericMessage<>("foo"));
    verify(log, times(1)).info(Mockito.anyString());
    verify(log, times(1)).warn(Mockito.anyString());
  }
  @Test
  public void testDontEvaluateIfNotEnabled() {
    LoggingHandler loggingHandler = new LoggingHandler("INFO");
    loggingHandler.setBeanFactory(mock(BeanFactory.class));
    loggingHandler.afterPropertiesSet();

    DirectFieldAccessor accessor = new DirectFieldAccessor(loggingHandler);
    Log log = (Log) accessor.getPropertyValue("messageLogger");
    log = spy(log);
    accessor.setPropertyValue("messageLogger", log);
    Expression expression = (Expression) accessor.getPropertyValue("expression");
    expression = spy(expression);
    accessor.setPropertyValue("expression", expression);
    when(log.isInfoEnabled()).thenReturn(false);
    loggingHandler.handleMessage(new GenericMessage<>("foo"));
    verify(expression, never())
        .getValue(Mockito.any(EvaluationContext.class), Mockito.any(Message.class));

    when(log.isInfoEnabled()).thenReturn(true);
    loggingHandler.handleMessage(new GenericMessage<>("foo"));
    verify(expression, times(1))
        .getValue(Mockito.any(EvaluationContext.class), Mockito.any(Message.class));
  }