我想用mockito测试一些服务。这些服务基于CDI,不幸的是,使用现场注入,我无法改变。
public class Service {
@Inject Logger logger;
public void method() {
logger.info("some log text");
}
}
现在使用mockito @InjectMocks
注释创建可测试的实例非常容易。它将注入嘲笑和间谍。
@RunWith(MockitoJUnitRunner.class)
public class ServiceTest {
@Spy Logger logger = LoggerFactory.getLogger(Service.class);
@InjectMocks Service service;
@Test public void test() {
// Given
// When
service.method();
// Then
}
我需要将一些工作记录器注入我正在测试的服务类中。记录器框架是slf4j,首选记录器是logback。但遗憾的是,Logger
的logback实现是最终的,所以我无法监视它,它会导致运行时异常。
我想到的解决方法:
但对于那些(那些)问题,是否有一个干净或至少更好的解决方案?
答案 0 :(得分:2)
您正在测试的课程很可能错误地使用了Logback。它不应该将logger
字段声明为类型ch.qos.logback.classic.Logger
,而应该是接口类型org.slf4j.Logger
,它由最终的Logback记录器类实现。
这样,您就可以避免这个问题,因为没有final
类可以被模拟或注入。