部分嘲弄一个班级

时间:2018-05-24 17:54:16

标签: java unit-testing powermockito

待测班级:

public class A {
    public static String m1(String p1, String p2);

    public static String m2(String p1, String p2, Object p3) {
        //...other work involving p3
        String res;
        if(conditionA)
        {
            res = m1(p1,p2); 
        } else {
            res = //something else;
        }
        //continue work
    }
}

详细说明: 方法m1进行数据库调用,使用"固有" (未注入)对Hibernate和Configs的依赖。 方法m1和m2的现有消费者,因此不能选择更改签名。 m1 / m2没有写过测试。

conditionA是一个远程"受控制的"发射门(我能够嘲笑)。

if条件是我最近添加的,需要在conditionA的两个值下验证方法m2的行为。

我正在寻找的是一种提供m1模拟实现的方法,同时仍然调用实际方法m2。

无论我试图模仿m1,我总是以PowerMockito的未完成的存根异常结束。

1 个答案:

答案 0 :(得分:0)

第一种方法:Mockito

你应该做部分嘲笑。使用mockito,您可以:

A a = Mockito.spy(A.class);

然后你可以存储你想要模拟的方法:

Mockito.doReturn("result").when(a).m1(...);

另一种方法仍然是真正的方法。

第二种方法:PowerMockito

PowerMockito.mockStatic(A.class);
when(A.m1(...)).thenReturn("result");

再一次,另一种方法仍将是真正的方法。