我正在执行TestNG测试,并且日志记录输出设置为DEBUG
,因此如果发生故障,我可以确切地检查出现了什么问题。
问题在于输出非常冗长,并且在运行时会困扰每个人。我想捕获所有Log4J日志记录事件 - 这很容易 - 并且只在测试失败时打印它们。此外,我需要考虑@Before/@After
方法并为它们打印输出。
假设我已经有一个Log4J LoggingEvent
列表,那么只有当Test
/ After
/ Before
方法失败时才能打印出来?
答案 0 :(得分:4)
Use Reporter.log(str) to log the message on the report.
array([ 1., 1., inf, 2., 2., 2.])
答案 1 :(得分:2)
实现并注册org.testng.ITestListener并对回调方法做出反应。
答案 2 :(得分:1)
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());
assertThat(arguments.getValue()。getLevel(),is(Level.WARN));
答案 3 :(得分:0)
将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");
}};