gpt4 book ai didi

java - 验证重载方法调用

转载 作者:行者123 更新时间:2023-12-01 04:46:48 25 4
gpt4 key购买 nike

我正在尝试使用 Mockito verify 功能来验证某个方法是否被多次调用。然而,我遇到的问题是该方法被重载,因此它声称该方法未被调用。为了在混合中添加 Spanner ,我还希望捕获传递给此方法的参数是什么。这是我到目前为止所拥有的:

@Test
public void simpleTest() throws IOException {
FlumeAppender mockAppender = Mockito.mock(FlumeAppender.class);
ArgumentCaptor<LoggingEvent> arguments = ArgumentCaptor.forClass(LoggingEvent.class);

// Load the message that should be sent to the class being tested
InputStream in = this.getClass().getResourceAsStream("/testMessage.xml");
StringWriter writer = new StringWriter();
IOUtils.copy(in, writer, "UTF-8");
String testMessage = writer.toString();

// Send a message to the class being tested. This class will
// (hopefully) call the function I am listening to below
eventSubscriber.handleMessage(testMessage);

// Verify that the append method was called twice
Mockito.verify(mockAppender, Mockito.times(2)).append(
arguments.capture());

// Do something with the arguments
}

正如我所说,我尝试验证(追加)的函数已过载。是否可以指定我要求验证哪个附加函数,同时仍捕获参数?

最佳答案

令人尴尬的是,我发现问题的解决方案是一个简单错误的结果。我会把答案贴出来供引用。

创建 ArgumentCaptor 时,使用泛型指定您期望的参数类型。我已经这样做了,但遗憾的是我使用了我不希望被调用的方法的其他版本之一的类型。简单的错误。

// This declaration
ArgumentCaptor<LoggingEvent> arguments = ArgumentCaptor.forClass(LoggingEvent.class);

// Should have been:
ArgumentCaptor<Event> arguments = ArgumentCaptor.forClass(Event.class);

一旦这是正确的,验证函数应该按预期工作,使用 ArgumentCaptor 中的类型来确定要查看的方法。

如此接近...

关于java - 验证重载方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15705526/

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