我这里有我问题的简化版本. 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";
};
};