将模拟注入被测类继承的类中

  • 本文关键字:继承 模拟 注入 java mockito
  • 更新时间 :
  • 英文 :


我正在为扩展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());
    }
}

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

请参阅文档:

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

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

相关内容

  • 没有找到相关文章

最新更新