我正在使用EasyMock和PowerMock编写测试用例,我想修改私有方法的行为,所以我在下面使用
PowerMock.expectPrivate(myClass, "m2", "Hello").andReturn("Something");
现在,当执行此期望私有语句时,它实际上正在调用 REAL 方法。
这个真正的方法调用导致了一个问题,因为私有方法有一些在测试执行期间不可用的变量,这就是我想要模拟这个私有方法的原因!
以上是打败私人方法嘲笑的目的!那是对的吗?
以下是我的示例类
@RunWith(PowerMockRunner.class)
@PrepareForTest({ReplicatePrivateMock.class})
public class ReplicatePrivateMock {
@Test
public void testPrivate() throws Exception {
MyClass myClass = new MyClass();
PowerMock.expectPrivate(myClass, "m2", "Hello").andReturn("Something");
System.out.println(myClass.m1("Hello"));
}
private class MyClass {
private StringBuilder builder;
public String m1(String s) {
return m2(s);
}
private String m2(String s) {
return builder.append(s) + s;
}
}
}
在这里,我正在模拟对m2()方法的调用,但是抛出NPE因为m2正在使用builder
变量为null!
请告诉我如何 ACTUALLY 模拟私有方法。非常感谢。