我有以下类(class)
class PowerMockitoTest{
private void TestPrivateMethod(){
System.out.println("Inside private method");
}
public void TestPublicMethod(){
System.out.println("Inside public method");
TestPrivateMethod();
}
}
我创建了如下测试类
@RunWith(PowerMockRunner.class)
public class PowerMockitoExampleTest {
@Test
public void test() throws Exception {
PowerMockitoTest testclass = PowerMockito.spy(new PowerMockitoTest());
PowerMockito.doNothing().when(testclass,"TestPrivateMethod");
testclass.TestPublicMethod();
}
}
我没有将 OP 作为“内部公共(public)方法”,而是将非常奇怪的 OP 作为“内部私有(private)方法”。虽然我已经对私有(private)方法进行了 stub 处理,但它被调用,并且公共(public)方法的 sysout 没有被打印。
当我使用PowerMockito.doAnswer()
时它工作正常,但它要求方法处于包级别而不是私有(private)。
最佳答案
这样写:
PowerMockitoTest testclass = PowerMockito.spy(new PowerMockitoTest());
try {
PowerMockito.doNothing().when(testclass, PowerMockito.method(PowerMockitoTest.class, "TestPrivateMethod")).withNoArguments();
} catch (Exception e) {
e.printStackTrace();
}
testclass.TestPublicMethod();
顺便说一句:
测试是关于模拟输入和调查输出(可以是模块的状态、函数的结果或对另一个函数的调用)。
您不应该模拟私有(private)方法,因为它们的结果不应该被视为输入,因为它们从外部不可见。
关于java - PowerMockito 私有(private) void 方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41138199/