模拟一个类,该类在某个时候被调用以添加带有签名的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))