Mockito - 匹配任何实现接口的实例,并回答
Mockito - Match any instance implementing an interface, and answer
模拟一个 class ,在某个时候被调用以添加带有签名
的 ActionListener 实例(java.awt.event 中的接口)
public void addActionListener(ActionListener l).
尝试模拟方法调用以使用答案,以便在使用匿名创建的 ActionListener 实例调用它时(就像在 answer 中一样),我可以跟踪它的 ActionListeners。但是我无法让它接受接口 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..]);
它们都给出了编译错误 Cannot resolve method when(void).
有什么方法可以使 Matchers.any 匹配任何实现该接口的实例,并将其用于答案?是不是因为它的 return 值是空的?
使用 Mockito 1.10、powermock 1.6.5 和 java7。(我不能使用 Java8)
您可以使用 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))
模拟一个 class ,在某个时候被调用以添加带有签名
的 ActionListener 实例(java.awt.event 中的接口)public void addActionListener(ActionListener l).
尝试模拟方法调用以使用答案,以便在使用匿名创建的 ActionListener 实例调用它时(就像在 answer 中一样),我可以跟踪它的 ActionListeners。但是我无法让它接受接口 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..]);
它们都给出了编译错误 Cannot resolve method when(void).
有什么方法可以使 Matchers.any 匹配任何实现该接口的实例,并将其用于答案?是不是因为它的 return 值是空的?
使用 Mockito 1.10、powermock 1.6.5 和 java7。(我不能使用 Java8)
您可以使用 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))