模拟继承的受保护方法

我这里有我问题的简化版本. A类具有受保护的方法. B类继承了此方法.

public class A{
    protected String getString(){
        //some Code
    }
}


public class B extends A{
    public void doSomething(){
        //someCode
        String result = getString();
    }
}

现在,我用Mockito编写了一个单元测试,它在另一个程序包测试中,并且我想测试doSomething()方法.为此,我需要模拟getString()调用.由于该方法是受保护的,并且我的测试类在differentnet包中,因此不能使用doReturn(…).when(classUnderTest).getString().问题是,我监视了B类.因此,我不能使用模拟(新B(),Mockito.CALLS_REAL_METHODS).

我尝试通过反射获取受保护的方法:

Method getString = classUnderTest.getClass().getDeclaredMethod("getString");
getString.setAccessible(true);

但是我不知道如何在doReturn()中使用它.

解决方法:

您可以使用“替代和子类”

B b = new B() {
  @Override
  protected String getString() {
    return "FAKE VALUE FOR TESTING PURPOSES";
  };
};
上一篇:java-单元测试ContainerRequestFilter,它将ResourceInfo与Mockito一起使用


下一篇:Spring Boot项目中使用Mockito