Макет приложения Log4j не работает (тест Junit)

#java #junit

Вопрос:

Когда я запускаю следующий тестовый код, тест завершается ошибкой со следующим сообщением об ошибке:

Может кто-нибудь, пожалуйста, скажите мне причину?

  • HelloWorldTest.java
 
  @Mock
  private Appender mockAppender;

  @Captor
  private ArgumentCaptor<LogEvent> logCaptor;

  @Before
  public void setup() {
        Mockito.reset(mockAppender);
        Mockito.when(mockAppender.getName()).thenReturn("MockAppender");
        Mockito.when(mockAppender.isStarted()).thenReturn(true);
        Mockito.when(mockAppender.isStopped()).thenReturn(false);

        LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
        Configuration config = ctx.getConfiguration();

        LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME);

        loggerConfig.setLevel(Level.INFO);
        loggerConfig.addAppender(mockAppender, Level.INFO, null);
        ctx.updateLoggers();
  }

    @Test
    public void outputLogMessage() {
        String name = "World";

        HelloWorld helloWorld = new HelloWorld();
        helloWorld.sayHello(name);

        Mockito.verify(mockAppender, Mockito.times(1)).append(logCaptor.capture());

        String message = logCaptor.getValue().getMessage().getFormattedMessage();
        Level level = logCaptor.getValue().getLevel();
        assertThat(message, is("Hello "   name));
        assertThat(level, is(Level.INFO));
    }

 

https://logging.apache.org/log4j/2.x/manual/customconfig.html#AddingToCurrent

  • Сообщение об ошибке
 Wanted but not invoked:
mockAppender.append(<Capturing argument>);
-> at verifyLogMessage

However, there were exactly 2 interactions with this mock:
mockAppender.getName();
-> at org.apache.logging.log4j.core.config.AbstractConfiguration.addAppender(AbstractConfiguration.java:708)

mockAppender.getName();
-> at org.apache.logging.log4j.core.config.AppenderControl.<init>(AppenderControl.java:51)