这是一个场景,我在我的一个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
和其他一些选项使用几个场景,但它总是调用实际方法。
答案 0 :(得分:0)
使用Powermock,您可以执行以下操作:
PowerMockito.whenNew(ChildClass1.class) .withArguments(any(ABC.class)) .thenReturn(mockedBaseClass); PowerMockito.whenNew(ChildClass2.class) .withArguments(any(ABC.class)) .thenReturn(mockedBaseClass);
当然我最喜欢的方法是传入一个知道如何制作这些ChildClass实例的工厂,然后你可以使用Mockito来模拟它,它会更干净。但是,如果这不是一个选项,希望以上情况应该有效。