昨天我问了一个类似的问题,其中我使用了一个方法名称,但是我传递了两个不同的参数。这个不涉及共享父类的参数类型。
我正在使用 PowerMockito 从构造函数返回 PrintWrite。我需要模拟它的打印方法。
我正在跟踪四种 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(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();
就像昨天一样,我不知道如何解决这个问题-我考虑使用自定义答案来跟踪输出的字符串(我想验证正在输出的值的实际顺序),但我相信这样做只会导致类似的错误。关于做什么的任何想法?