java - PowerMockito 私有(private) void 方法问题

标签 java junit mocking powermock

我有以下类(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/

相关文章:

java - 作为结果返回模拟方法的参数

c - 如何在 C 中模拟 Linux 系统调用

java - java中局部变量和类变量的行为

java - 配置 tomcat 并托管 java web 应用程序

java - 将 ehcache 添加到 DAO 类后,Junit 测试失败,无法在测试类中实例化 DAO

go - Testify mock 正在返回函数未被调用的断言

python - 使用 Mock 修补 render_to_response

java - 如何使我的 main if、elseIf 和 else 执行与我的 main if 相同的操作而不出现 "duplicate"错误?

java - jar导出后找不到类

java - IntelliJ - 测试配置。如何为每个人配置一次运行?