代码之家  ›  专栏  ›  技术社区  ›  Robert Munteanu

在执行TestNG测试时捕获Log4j输出

  •  6
  • Robert Munteanu  · 技术社区  · 14 年前

    我正在执行TestNG tests,日志输出设置为 DEBUG ,这样万一出现故障,我就可以准确地检查出什么地方出了问题。

    @Before/@After 方法并为其打印输出。

    假设我已经有了Log4J的列表 LoggingEvent 我怎么能只在 Test After / Before 方法失败?

    4 回复  |  直到 14 年前
        1
  •  4
  •   Vinayak    8 年前

    使用Reporter.log(str)将消息记录到报表中。

    @AfterMethod
    public void printLOGonFailure(ITestResult result) {
        if (result.getStatus() == ITestResult.FAILURE) {
            String  str = getLog();
            Reporter.log(str);
        }
    }
    
        2
  •  2
  •   Sardathrion - against SE abuse    10 年前

    This site has a explanation on how to do it. . 我复制了这里的代码部分,以防链接失效。

    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());
    

        3
  •  1
  •   Community Tales Farias    4 年前

    实施并注册 org.testng.ITestListener 并对回调方法做出反应。

        4
  •  0
  •   Gangnus    8 年前

    将JMockit放入依赖项中。有了它,日志测试非常容易。

         @Cascading
    final static Logger logging = Logger.getLogger(<some your>.class);
    

    投入试验:

        testedFunction(a, b, c);
        new Verifications() {{
            logging.error("The message that should be output");
            logging.info("Another message");
        }};