![](/img/trans.png)
[英]How to inject final class such as String into constructor of class annotated with @InjectMocks in Mockito 3
[英]How to use InjectMocks if the instance to be injected has a final class
我想用Mockito测试一些服务。 这些服务基于CDI,但是不幸的是,使用了字段注入,我无法更改。
public class Service {
@Inject Logger logger;
public void method() {
logger.info("some log text");
}
}
现在,使用@InjectMocks
的@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。 但是再次不幸的是,Logback的Logger
实现是最终的,因此我无法对此进行监视,它会导致运行时异常。
我想到的解决方法:
但是,对于那些(那些)问题,是否有一个干净的或至少更好的解决方案?
您正在测试的课程很可能使用了错误的Logback。 而不是将logger
字段声明为ch.qos.logback.classic.Logger
类型,而应使用接口类型org.slf4j.Logger
,该接口类型由最终的Logback logger类实现。
这样,您就可以避免该问题,因为没有要模拟或注入的final
类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.