1

我正在尝试使用 Mockitoverify功能验证一个方法是否被多次调用。但是,我遇到的问题是该方法已重载,因此它声称该方法未被调用。要将扳手添加到组合中,我还希望捕获传递给此方法的参数是什么。这是我到目前为止所拥有的:

@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
}

就像我说的那样,我试图验证(追加)的功能已重载。是否可以在仍捕获参数的同时指定我要求验证的附加函数?

4

1 回答 1

0

令人尴尬的是,我发现我的问题的解决方案是一个简单错误的结果。我将发布答案以供参考。

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

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

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

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

很近...

于 2013-03-29T15:36:05.580 回答