我确信这是一个很常见的问题,但我真的无法摆脱这个问题,因为我在模拟私有方法时会在内部调用另一个方法并返回一个集合。我正在测试的类有一个公共方法,它调用私有方法来获取 Collection 对象。我使用 PowerMock 创建私有方法的间谍。
public void method1(String s)
{
Collection<Object> list = invokePrivate()
}
private Collection<Object> invokePrivate()
{
Wrapper wrapperObj = Factory.getInstance.getWrapper();
Collection<Object> list = wrapperObj.callWrapperMethod(); // This always calls into real method, instead of mocked version.
return list;
}
Run Code Online (Sandbox Code Playgroud)
测试类-:
因此,为了测试公共方法“method1”,我使用 PowerMockito 创建一个间谍来监视私有方法并返回演示列表。
MainClass obj = new MainClass();
MainClass spy = PowerMockito.spy(obj);
PowerMockito.when(spy, method(MainClass.class, "inokePrivate"))
.thenReturn(list); // demo list which exists as a test class member.
Run Code Online (Sandbox Code Playgroud)
上面调用了私有方法,该方法又尝试调用位于不同工件中的wrapperObj.callWrapperMethod(),并在那里中断,因为它在那里找不到某些实现。所以我尝试模拟wrapperObj.callWrapperMethod。
WrapperClass wr = new WrapperClass();
WrapperClass spy1 = PowerMockito.spy(wr);
when(spy1.callWrapperMethod()).thenReturn(list) // …Run Code Online (Sandbox Code Playgroud)