Powermock 无需从 public 方法调用私有方法即可测试私有方法

Powermock to test private methods without calling private method from public method

Class Calculate{
private int Add(int a, int b){
    return a+b;
}
}

Class TestCalculate{
//Here I want to mock the Calculate to invoke the add method.
}

能否请您建议如何在上述情况下使用 Powermock 调用私有方法?

对于测试私有方法,众说纷纭。您可以提出不这样做的理由,但是,尤其是对于更复杂的私有方法,您也可以提出这样做​​的理由。您会在 programmers 找到很好的讨论。

假设您实际上仍然想这样做(而不是重构您的代码或仅测试您的 public api),使用 PowerMock 实际上非常简单,请参阅 here:

Calculate calc = new Calculate();
int sum = Whitebox.<Integer> invokeMethod(calc , "Add", 1, 2);
assertThat(sum, equalTo(3)); // using static imports here

(请注意,通常,方法名称应以小写字符开头,因此此处的名称最好是 add 而不是 Add。)

即使没有 PowerMock 也很容易做到,因为反射可以让你找到并调用私有方法,但这超出了这个问题的范围(PowerMock 允许你用一个语句来做到这一点)。