模拟子类对象和超类引用

时间:2016-12-14 22:40:01

标签: java unit-testing mockito powermockito

这是一个场景,我在我的一个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和其他一些选项使用几个场景,但它总是调用实际方法。

1 个答案:

答案 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来模拟它,它会更干净。但是,如果这不是一个选项,希望以上情况应该有效。