gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:43:36 25 4
gpt4 key购买 nike

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

public void addActionListener(ActionListener l).

尝试模拟方法调用以使用答案,以便在使用匿名创建的 ActionListener 实例调用它时(就像在这个 answer 中一样),我可以跟踪它的 ActionListeners。但是我无法让它接受接口(interface) 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 与任何实现该接口(interface)的实例相匹配,并将其用作答案?不可以是因为它的返回值是void吗?

使用 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))

关于java - Mockito - 匹配任何实现接口(interface)的实例,并回答,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38217460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com