【问题标题】:How to inject mock into @Autowired field in an abstract parent class with Mockito如何使用 Mockito 将模拟注入抽象父类中的 @Autowired 字段
【发布时间】:2020-09-22 01:11:39
【问题描述】:

我正在为具有抽象超类的类编写单元测试,而 ChildClass 中的一个函数是调用 BaseClass 对象上的方法。

ChildClass 看起来像这样。

public class ChildClass extends ParentClass {
    public void functionA(){
        objectFromParentClass.functionB();
    }
}

父类

public abstract class ParentClass {
    @Autowired
    protected typeFromParentClass objectFromParentClass;

    public void someFunction() {}
}

由于父类是抽象的 @InjectMocks 并且 ReflectionTestUtils() 不起作用。有没有办法用 Mockito 将模拟的 objectFromParentClass 注入到 ParentClass 中?

编辑:子类和父类都不是我写的,我只是在测试它。

【问题讨论】:

  • 在父类中创建一个getter/setter,并在你的测试类中添加注解Spy(让getter返回一个mock)+ InjectMocks

标签: java mockito superclass


【解决方案1】:

https://github.com/exabrial/mockito-object-injection

这是我们为解决这个确切问题而编写的一个 Junit5 扩展。本质上,它需要一个对象映射并将它们注入到被测类的字段中。非常适合 InjectMocks 不足的地方!

【讨论】:

    【解决方案2】:

    ReflectionTestUtils.setField() 在这种情况下确实有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      相关资源
      最近更新 更多