Получение вывода Log4j при выполнении тестов TestNG

Я выполняю тесты TestNG, и вывод входа установлен на DEBUG, таким образом в случае отказа я могу добраться для осмотра точно, что идет не так, как надо.

Проблема состоит в том, что вывод является чрезвычайно подробным, и он беспокоит всех, когда он работает. Я хотел бы получить все события входа Log4J - который легок - и только распечатайте их, когда тест перестал работать. Кроме того, я должен принять во внимание @Before/@After методы и также печатают вывод для них.

Предположение, что у меня уже есть Список Log4J LoggingEvents, как я могу распечатать их только когда Test/After/Before сбой методов?

7
задан Robert Munteanu 14 July 2010 в 15:22
поделиться

2 ответа

Реализуйте и зарегистрируйте org.testng.ITestListener и отреагируйте на методы обратного вызова.

2
ответ дан 7 December 2019 в 05:17
поделиться

На этом сайте есть объяснение, как это сделать. . Я скопировал сюда часть кода на случай, если ссылка отключится.

Logger.getLogger(this.getClass())
log4j.rootLogger=ERROR,TESTAPPENDER
log4j.appender.TESTAPPENDER=com.my.fantastic.MockedAppender
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

public class FooTest {
    private Appender appenderMock;
    @Before
    public void setupAppender() {
        appenderMock = mock(Appender.class);
        Logger.getRootLogger().addAppender(appenderMock);
    }
    @After
    public void removeAppender() {
        Logger.getRootLogger().removeAppender(appenderMock);
    }
    @Test
    public void testMethod()  {
        doStuffThatCausesLogging();
        verify(appenderMock).doAppend((LoggingEvent) anyObject());
    }
}

ArgumentCaptor arguments = ArgumentCaptor.forClass(LoggingEvent.class);
verify(appenderMock).doAppend(arguments.capture());

assertThat (arguments.getValue (). GetLevel (), is (Level.WARN));

2
ответ дан 7 December 2019 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: