这是场景,我的 cls 方法之一中有类似的内容:
public class xyz{
public Object build(Map map) {
BaseClass cls;
if(SomeconditionTrue) {
cls = new ChildClass1(new ABC());
} else {
cls = new ChildClass2(new ABC());
}
cls.callMethod();
}
}
对于上述场景,我正在使用 PowerMockito 编写一个测试用例,我想模拟这个方法调用,cls.callMethod()
。当我尝试正常的模拟时,它调用失败的实际方法callMethod()
。有人可以帮我模拟该方法调用吗?尝试使用 PowerMockito.stub 和其他一些选项使用几个场景,但它总是调用实际方法。
最佳答案
使用 Powermock 您可以执行以下操作:
PowerMockito.whenNew(ChildClass1.class) .withArguments(any(ABC.class)) .thenReturn(mockedBaseClass); PowerMockito.whenNew(ChildClass2.class) .withArguments(any(ABC.class)) .thenReturn(mockedBaseClass);
当然,我首选的方法是传入一个知道如何创建这些 ChildClass 实例的工厂,然后您可以使用 Mockito 来模拟它,这样会更干净。但是,如果这不是一个选择,希望上述内容应该有效。
关于java - 模拟子类对象和父类(super class)引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41153464/