调用一个类,在某个时候调用它来添加一个带有签名的ActionListener实例(java.awt.event中的接口)
public void addActionListener(ActionListener l).
尝试模拟方法调用以使用答案,以便在使用匿名创建的ActionListener实例(就像在此answer中)调用它时,我可以跟踪其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)
答案 0 :(得分:3)
您可以使用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))