我想编写一个testng测试用例来验证生成的日志(log4j)是否完全遵循log4j.properties文件中给定的转换模式。例如,如果我有转换模式:[%d] %-5p [%t]: %m%n
示例日志看起来像[2015-07-07 16:42:09,937] DEBUG [main]: Message 1
我想确保日志遵循确切的模式。
所以我现在正在做的是首先读取所有登录到String数组的日志并循环该数组,以查找记录中是否包含没有日期DEBUG [main]: Message 1
的预期日志。
这种测试日志记录的方式是否正确? 如果您对测试日志的好方法有任何想法,请指出。
答案 0 :(得分:0)
有任何解决方案。我心中的第一个是:
将log4j
配置为在System.out
上撰写并使用SystemOutRule
。
public void MyTest {
@Rule
public final SystemOutRule systemOutRule = new SystemOutRule().enableLog();
@Test
public void writesTextToSystemOut() {
System.out.print("hello world");
assertEquals("hello world", systemOutRule.getLog());
}
}
请参阅:https://stefanbirkner.github.io/system-rules/index.html
如果记录器写入System.out
和/或System.err
,此解决方案独立于记录器实现。
答案 1 :(得分:0)
更多log4J
知道:
使用模拟框架 - @slartidan说 - 并模拟appender实现。
根据您首选的模拟框架和log4J 1.x
或log4J 2.x
,解决方案完全不同。
Log4J 1.2
创建一个模拟记录器appender并在logger上添加此appender:
Logger.getLogger("...").addAppender( mockedAppender );
请参阅:http://getbootstrap.com/components/#glyphicons-how-to-use
Log4J 2.x
扩展ConfigurationFactory
和Configuration
(仅限于测试人工制品)并添加模拟的appender。
创建自定义配置的最简单方法是扩展其中一个标准配置类(XMLConfiguration,JSONConfiguration),然后为扩展类创建一个新的ConfigurationFactory。标准配置完成后,可以将自定义配置添加到其中。