1

我正在为扩展 B 类的 A 类编写单元测试。我正在使用 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());
    }
}
4

2 回答 2

4

Mockito 无法注入静态最终字段。事实上,没有人可以,因为根据定义,final 字段不能被分配两次。而且 Mockito 无论如何都不会注入静态字段。只有实例字段。

请参阅文档

但是,静态或最终字段将被忽略。

于 2012-11-23T20:41:09.867 回答
1

如果您使用的是 Java EE 6 @Inject,它将无法在 CDI 容器之外工作,这是规范的一部分。如果这是一个单元测试,您必须自己提供。

于 2012-11-23T15:32:01.603 回答