当前位置: 首页 > 知识库问答 >
问题:

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

李云
2023-03-14

我正在为扩展了B类的a类编写单元测试。我正在使用Mockito,我想模拟一个组织。slf4j。这两个类都可以使用。问题是,当类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());
    }
}

共有2个答案

蒯胜泫
2023-03-14

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

盛浩阔
2023-03-14

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

请参阅文档:

然而,静态或最终字段将被忽略。

 类似资料:
  • 我有一个超类型(CaseDTO),其中有几个子类型(GroupCaseDTO,IPCaseDTO),我想注入。开发环境是JDev 12c。 以下是两个注射点: > @将@CaseContext private CaseDTO muwCase注入; 注入特定子类型(此注入点仅适用于一个子类型): @将@CaseContext private GroupCaseDTO muwCase注入; 为了获得这

  • 我是JUnit和Mockito的新手,我想在我的DAO测试课中模拟我的SessionFactory,这就是我继续的方式: 这是我的刀类 但是当我运行我的测试时,我有一个< code > Java . lang . NullPointerException 异常,nullPointerException在< code > todos = session factory . getcurrentses

  • <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <meta name="viewport" content="width=device-width, initial-scale=1.0">

  • 本文向大家介绍JavaScript中的继承之类继承,包括了JavaScript中的继承之类继承的使用技巧和注意事项,需要的朋友参考一下 继承简介       在JS中继承是一个非常复杂的话题,比其他任何面向对象语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。在JS中想要达到继承公用成员的目的,需要采取一系列措施。JS属于原型式继承,得益于这种灵活性,我们既可以

  • 1、定义类的继承 说到继承,你一定会联想到继承你老爸的家产之类的。 类的继承也是一样。 比如有一个旧类,是可以算平均数的。然后这时候有一个新类,也要用到算平均数,那么这时候我们就可以使用继承的方式。新类继承旧类,这样子新类也就有这个功能了。 通常情况下,我们叫旧类为父类,新类为子类。 首先我们来看下类的继承的基本语法: class ClassName(BaseClassName): <st

  • 本文向大家介绍String类可以被继承吗?相关面试题,主要包含被问及String类可以被继承吗?时的应答技巧和注意事项,需要的朋友参考一下 String类在声明时使用final关键字修饰,被final关键字修饰的类无法被继承。 接下来我们可以看一下String类的源代码片段:   为什么Java语言的开发者,把String类定义为final的呢? 因为只有当字符串是不可变的,字符串池才有可能实现。