class 的部分模拟

Partial mocking of a class

Class 正在测试中:

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 具有 "inherent"(未注入)依赖性。 存在方法 m1 和 m2 的现有使用者,因此无法更改签名。 m1/m2 还没有编写测试。

conditionA 是一个远程 "controlled" 发射门(我可以模拟)。

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

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

无论我尝试做什么来模拟 m1,我总是以 PowerMockito 未完成的存根异常结束。

第一种方法:Mockito

你应该做部分模拟。使用 mockito,您可以:

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

然后你可以像这样存根你想要模拟的方法:

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

另一种方法将保持真实。

第二种方法:PowerMockito

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

再一次,另一种方法将保持真实。