将mock注入到被测试的类继承的类中?

时间:2012-11-23 15:20:10

标签: java mockito

我正在为A类编写一个单元测试,它扩展了B类。我正在使用Mockito,我想模拟一个org.slf4j.logger这两个类来使用。问题是当A类调用B类的方法时,模拟的记录器没有注入B类,所以我得到了一个N​​PE。有没有办法成功测试?

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());
    }
}

2 个答案:

答案 0 :(得分:4)

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

请参阅the documentation

  

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

答案 1 :(得分:1)

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