我正在为A类编写一个单元测试,它扩展了B类。我正在使用Mockito,我想模拟一个org.slf4j.logger这两个类来使用。问题是当A类调用B类的方法时,模拟的记录器没有注入B类,所以我得到了一个NPE。有没有办法成功测试?
public class ClassA extends ClassB {
@Inject
private static final Logger LOGGER = LoggerFactory.getLogger(ClassA.class);
public void classAMethod {
LOGGER.debug("u wot m8");
this.classBMethod();
}
public class ClassB {
@Inject
private static final Logger LOGGER = LoggerFactory.getLogger(ClassB.class);
public void classBMethod {
LOGGER.debug("u wot m8");
}
}
public class ClassATest {
@InjectMocks
private ClassA classA = new ClassA
@Mock
private Logger mockLogger;
@Test
public void testClassA() {
classA.classAMethod ();
verify(mockLogger, (times, 2)).debug(Mockito.anyString());
}
}
答案 0 :(得分:4)
Mockito无法注入静态最终字段。事实上,没有人可以,因为根据定义,最终字段不能被分配两次。而Mockito无论如何也不会注入静态场。只有实例字段。
但是静态或最终的字段将被忽略。
答案 1 :(得分:1)
如果您使用的是Java EE 6 @Inject,它将无法在CDI容器外工作,这是规范的一部分。如果这是单元测试,您必须自己提供。