私は昨日、同じような質問をしました。そこでは、単一のメソッド名を使用していますが、2 つの異なる引数を渡しています。これには、親クラスを共有する引数の型は含まれません。
PowerMockito を使用して、コンストラクターから PrintWrite を返しています。その印刷方法をモックする必要があります。
私が追跡している 4 種類の print/println 呼び出しがあります。
print(long l)
print(java.lang.String s)
print(char c)
println()
特に気になるのはロングプリントのもの。私は次の設定をしています:
Mockito.doNothing().when(fakePrintWriter).println();
Mockito.doNothing().when(fakePrintWriter).print(any(Long.class));
Mockito.doNothing().when(fakePrintWriter).print(any(String.class));
Mockito.doNothing().when(fakePrintWriter).print(any(Character.class));
次の検証を使用して、特定の引数をキャプチャしたいと考えています。
Mockito.verify(fakePrintWriter, Mockito.times(11)).print(outputCaptor.capture());
Mockito.verify(fakePrintWriter, Mockito.times(1)).print(longPrintCaptor.capture());
Mockito.verify(fakePrintWriter, Mockito.times(9)).print(eq(','));
Mockito.verify(fakePrintWriter, Mockito.times(3)).println();
これで私を平手打ちします:
Wanted but not invoked:
printWriter.print(<Capturing argument>);
通常の long で print をテストしてドリルダウンすると、print(long l) の呼び出しが実際には println の呼び出しであることがわかりました。そのため、代わりに長い印刷設定/検証を次のように変更しました。
Mockito.doNothing().when(fakePrintWriter).println(any(Long.class));
...
Mockito.verify(fakePrintWriter, Mockito.times(1)).println(longPrintCaptor.capture());
次に、println との競合が発生します。
Argument(s) are different! Wanted:
printWriter.println(<Capturing argument>);
...
Actual invocation has different arguments:
printWriter.println();
...
Expected :printWriter.println(<Capturing argument>);
Actual :printWriter.println();
昨日のように、これを解決する方法について途方に暮れています-出力される文字列を追跡するためにカスタム回答を使用することを検討しました(出力されている値の実際の順序を確認したい)が、そうすることは同様のエラーが発生します。何をすべきかについてのアイデアはありますか?