#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)