我在我的项目中使用JUnit4和Hibernate3.Hibernate依赖于Slf4j,因此我的项目也包含了这个库.现在我想在单元测试中使用Slf4j来记录补充测试信息.您能否提供一个简短的示例,说明我的单元测试应该如何只记录一行文本?优选地,在多个测试中没有代码重复.
dty*_*dty 13
为什么要在单元测试中记录内容?单元测试应该通过/失败,并应使用测试框架来表明.您不希望通过输出读取以查看测试是通过还是失败.如果它失败了,在IDE /调试器中运行它是修复它的最佳方法.
Jim*_*ugh 11
我也喜欢在我的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");
}
}
Run Code Online (Sandbox Code Playgroud)
我使用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>
Run Code Online (Sandbox Code Playgroud)
这给了我来自JUnit类的信息级输出,以及来自Hibernate运行时和Hibernate使用的其他库的一些有用的东西.根据自己的口味调整.
最后,我需要确保在执行JUnit测试时,所有以下库都在我的类路径中:
slf4j-api-1.6.0.jarslf4j-log4j12-1.6.0.jarlog4j-1.2.16.jarlog4j.xml (我的配置文件,如上所示)这是我在使用log4j时所做的.如果使用其他日志记录实现,则相应地进行调整.如果您使用不同版本的slf4j并不重要,只要"API"和实现JAR是相同的版本(我的是1.6.0).
另一种解决方案是将日志记录实现切换为仅用于测试的简单实现.
所以在你的pom.xml中
<!-- Depend on slf4j API -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
<!-- Use SimpleLogger as the slf4j implementation in test -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.12</version>
<scope>test</scope>
</dependency>
<!-- Use log4j as the slf4j implementation during runtime (not test) -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
<scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
SimpleLogger默认情况下只将所有内容记录到stderr,不需要任何配置文件
| 归档时间: |
|
| 查看次数: |
24236 次 |
| 最近记录: |