Утверждение сообщений журнала с использованием Mockito, TestNG и Log4j2 - PullRequest
0 голосов
/ 28 июня 2018

Я следил asserting-log-messages-with-log4j2-and-mockito , чтобы написать тест TestNG для проверки журналирования для Log4j2. Большая часть того, что написано в посте, кажется, работает. Однако, когда я запускаю тест, я получаю:

Wanted but not invoked:
appender.append(<Capturing argument>);
-> at LoggingTest.test(LoggingTest.java:105)

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

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

Мой TestNGclass:

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
import org.mockito.ArgumentCaptor;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

public class LoggingTest {

    private Appender appender;

    private ArgumentCaptor<LogEvent> captor;

    @BeforeMethod
    public void setUp() {
        appender = mock(Appender.class);
        captor = ArgumentCaptor.forClass(LogEvent.class);

        reset(appender);
        when(appender.getName()).thenReturn("Appender");
        when(appender.isStarted()).thenReturn(true);
        when(appender.isStopped()).thenReturn(false);

        LoggerContext context = (LoggerContext)LogManager.getContext();
        Configuration config = context.getConfiguration();
        config.addAppender(appender);
        LoggerConfig rootConfig = config.getRootLogger();
        rootConfig.setLevel(Level.INFO);
        rootConfig.addAppender(appender, Level.INFO, null);
        context.updateLoggers();
    }

    @Test
    public void test() {        
        LogManager.getLogger().info("testing");
        verify(appender).append(captor.capture());
        LogEvent logEvent = captor.getValue();
        assertThat(logEvent.getMessage()).isEqualTo("test");
    }
}

Я смотрю на это некоторое время и не смог найти свою ошибку. Может ли кто-нибудь указать мне правильное направление?

...