【发布时间】:2015-01-25 15:42:41
【问题描述】:
我有一个项目,如果 SLF4J 在类路径上,我需要提供 SLF4J 日志记录,否则直接向控制台提供日志记录。我用类似于以下的代码实例化我的记录器:
try {
Class.forName("org.slf4j.LoggerFactory");
return new Slf4JLogProvider();
} catch (ClassNotFoundException e) {
System.out.println("SLF4J not on classpath, defaulting to console logging");
}
return new ConsoleLogProvider();
请注意,Slf4JLogProvider 是 SLF4J 的自定义包装器,它不是 SLF4J 本身的一部分。
我的项目是基于 Maven 的,这个模块声明了对 SLF4J 的可选依赖:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<optional>true</optional>
</dependency>
我希望能够测试此代码。类路径很棘手,正确测试它是恕我直言很重要。基本上,我希望能够在测试期间修改类加载器,以确保不存在 SLF4J 并验证控制台日志记录是否已初始化。
有什么“干净”的方法吗?任何可以为依赖类路径的测试提供支持的框架?在特定类加载器中隔离测试的任何标准方法?
正如@piotrek 所指出的,这可能使它成为一个集成测试而不是单元测试。
【问题讨论】:
标签: java unit-testing maven classpath