Mockito - 匹配实现接口的任何实例,并回答



模拟一个类,该类在某个时候被调用以添加带有签名的ActionListener(java.awt.event中的接口)的实例

public void addActionListener(ActionListener l).

尝试模拟方法调用以使用答案,以便我可以跟踪其 ActionListener,当它被匿名创建的 ActionListener 实例调用时(就像在这个答案中一样)。但是我无法使其接受接口ActionListener的任何实例。

到目前为止,我已经尝试了其他问题的几个例子,但无济于事:

when(mock.addActionListener(Matchers.<ActionListener>any())).thenAnswer(new Answer<Void>() {
        @Override
        public Void answer(InvocationOnMock invocation) throws Throwable {
            Object[] arguments = invocation.getArguments();
            if (arguments != null && arguments.length > 0 && arguments[0] != null) {
                listeners.add((ActionListener) arguments[0]);
            }
            return null;
        }
    });
when(mock.addActionListener(any(ActionListener.class))).thenAnswer([..snip..]);

它们都给出编译错误,说无法解析方法时(无效)。

有没有办法使 Matchers.any 与实现接口的任何实例匹配,并将其用于答案?难道不可能,因为它的返回值是无效的吗?

使用 Mockito 1.10、powermock 1.6.5 和 java 7。(我不能使用Java 8)

您可以使用

Mockito.doAnswer(),它是为返回void的方法创建的:

doAnswer(new Answer<Void>() {
    @Override
    public Void answer(InvocationOnMock invocation) throws Throwable {
        Object[] arguments = invocation.getArguments();
        if (arguments != null && arguments.length > 0 && arguments[0] != null) {
            listeners.add((ActionListener) arguments[0]);
        }
        return null;
    }
}).when(mock).addActionListener(Matchers.<ActionListener>any());
doAnswer([..snip..]).when(mock).addActionListener(any(ActionListener.class))

相关内容

  • 没有找到相关文章

最新更新