web-dev-qa-db-ja.com

PowerMockitoはx回呼び出されるプライベートメソッドを検証します

私はPowerMockitospyを使用してプライベートメソッドをモックしています:

final SomeClass someClass = new SomeClass();
final SomeClass spy = PowerMockito.spy(someClass);

PowerMickito.doReturn("someValue", spy, "privateMethod1");
final String response = Whitebox.invokeMethod(spy, "anotherPrivateMethod");

// I can now verify `response` is of the correct data
// But I also want to verify `privateMethod1` was called x times or so

メソッドがx回呼び出されたことを確認する方法がわかりません。

補足

すべてのプライベートメソッドをprotectedにしてから、そのクラスをテストクラスで拡張してそれを行う方が良いですか。

6
Kousha

これで十分です。

PowerMockito.doReturn("someValue", spy, "privateMethod1");
final String response = Whitebox.invokeMethod(spy, "anotherPrivateMethod");
assert(response)
verifyPrivate(spy, times(1)).invoke("anotherPrivateMethod", "xyz");

私はあなたのプライベートメソッド(anotherPrivateMethod)が1つの引数「xyz」を取ると仮定しています。プライベートメソッドの宣言に従って変更できます。

6
pvpkiran

プライベートメソッドのテストは、実装の詳細をテストすることです。実装を変更することを選択した場合、テストは価値がなくなり、破棄されます。

どのようにではなく、何をテストするよう努めるべきです。その後、実装を変更してもテストは存続します。

偶発的な詳細のテストを回避する方法についての素晴らしい論文here にあります。

1
Frank Neblung