gpt4 book ai didi

java - Mockito的ArgumentCaptor : One method name, 两个方法定义(二)

转载 作者:行者123 更新时间:2023-11-30 11:39:24 27 4
gpt4 key购买 nike

我问了一个similar question yesterday我在其中使用了一个方法名称,但传递了两个不同的参数。这一个不涉及共享父类的参数类型。

我正在使用 PowerMockito 从构造函数返回 PrintWrite。我需要模拟它的打印方法。

我正在跟踪四种 print/println 调用:

print(long l)
print(java.lang.String s)
print(char c)
println()

我特别关心的是打印 long 的那个。我有以下设置:

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();

就像昨天一样,我不知道如何解决这个问题 - 我考虑过使用自定义答案来跟踪输出的字符串(我想验证输出值的实际顺序)但我相信这样做所以只会导致类似的错误。有什么想法吗?

最佳答案

与其尝试模拟 PrintWriter,不如使用一个真实的 PrintWriter,它写入内存而不是文件。

ByteArrayOutputStream bytes = new ByteArrayOutputStream();
PrintWriter fakePrintWriter = new PrintWriter(byteArrayOutputStream);

// invoke method on unit under test

assertThat(bytes.toString()).isEqualTo(expectedOutput);

关于java - Mockito的ArgumentCaptor : One method name, 两个方法定义(二),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13298662/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com