在单元测试中是否有任何简单的slf4j使用模式?
我在我的项目中使用JUnit4和Hibernate3。Hibernate依赖于Slf4j,因此我的项目也包括这个库。现在我想在单元测试中使用Slf4j来记录补充测试信息。您能提供一个简短的示例,说明我的单元测试应该是什么样子的,以便只记录一行文本吗?最好在多个测试中没有代码重复。
我在我的项目中使用JUnit4和Hibernate3。Hibernate依赖于Slf4j,因此我的项目也包括这个库。现在我想在单元测试中使用Slf4j来记录补充测试信息。您能提供一个简短的示例,说明我的单元测试应该是什么样子的,以便只记录一行文本吗?最好在多个测试中没有代码重复。
为什么要在单元测试中记录内容?单元测试应为通过/失败,并应使用测试框架来指示这一点。您不希望通过读取输出来查看测试是通过还是失败。如果它失败了,在IDE/调试器中运行它是修复它的最佳方法。
我也喜欢在我的DAO类的JUnit测试中使用slf4j。当您创建新测试或修改旧测试时,它确实很有帮助。我通常将旧的日志记录输出保留在调试级别,并在信息级别创建新的日志记录语句,而我仍然在该方法中积极处理代码。我的一个 JUnit 类看起来像这样:
package com.example.mydao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// other imports not shown...
public class TestMyDAO extends TestCase {
private static final Logger logger =
LoggerFactory.getLogger(TestMyDAO.class);
public void testA() {
logger.debug("Logging from testA() method");
}
public void testB() {
logger.debug("Logging from testB() method");
}
public void testThatIAmWorkingOn() {
logger.info("Logging from my new test method at INFO level");
}
}
我使用log4j作为实际的日志记录提供程序,所以我的配置文件如下所示:log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c{1}] %m %n" />
</layout>
</appender>
<logger name="com.example.mydao" additivity="false">
<level value="INFO" />
<appender-ref ref="consoleAppender"/>
</logger>
<logger name="org.hibernate" additivity="false">
<level value="WARN" />
<appender-ref ref="consoleAppender"/>
</logger>
<logger name="org.hibernate.connection.DriverManagerConnectionProvider" additivity="false">
<level value="INFO" />
<appender-ref ref="consoleAppender"/>
</logger>
<logger name="org.hibernate.connection.C3P0ConnectionProvider" additivity="false">
<level value="INFO" />
<appender-ref ref="consoleAppender"/>
</logger>
<logger name="com.mchange" additivity="false">
<level value="WARN" />
<appender-ref ref="consoleAppender"/>
</logger>
<logger name="com.mchange.v2.resourcepool.BasicResourcePool" additivity="false">
<level value="INFO" />
<appender-ref ref="consoleAppender"/>
</logger>
<logger name="com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource" additivity="false">
<level value="INFO" />
<appender-ref ref="consoleAppender"/>
</logger>
<logger name="com.mchange.v2.c3p0.C3P0Registry" additivity="false">
<level value="INFO" />
<appender-ref ref="consoleAppender"/>
</logger>
<root>
<priority value ="WARN" />
<appender-ref ref="consoleAppender"/>
</root>
</log4j:configuration>
这给了我来自JUnit类的信息级输出,以及来自Hibernate运行时和其他与Hibernate一起使用的库的一些有用的东西。根据自己的口味进行调整。
最后,我需要确保在执行 JUnit 测试时,以下所有库都在我的类路径中:
slf4j-api-1.6.0.jar
slf4j-log4j12-1.6.0.jar
log4j-1.2.16.jar
log4j.xml
(我的配置文件,如上图所示)这就是我在使用log4j时所做的。如果使用不同的日志记录实现,请进行相应的调整。如果您使用的是不同版本的slf4j,这并不重要,只要“API”和实现JAR是相同的版本(我的都是1.6.0)。