Mockito:有没有一种方法可以捕获存根方法的返回值? [英] mockito: Is there a way of capturing the return value of stubbed method?
本文介绍了Mockito:有没有一种方法可以捕获存根方法的返回值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果我模拟一种方法来返回某个对象的新实例,那么如何捕获返回的实例?
If I mock a method to return a new instance of some object, how can I capture the returned instance?
例如:
when(mock.someMethod(anyString())).thenAnswer(new Answer() {
Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
Object mock = invocation.getMock();
return new Foo(args[0])
}
});
很明显,我可以有一个Foo类型的字段,并且在answer
内部将其设置为新实例,但是有更好的方法吗?像ArgumentCaptor一样?
Obviously, I can have a field of type Foo and inside answer
set it to the new instance, but is there a nicer way? Something like ArgumentCaptor?
推荐答案
看起来像您想先先观察然后再Answer
个实例,并在每次调用answer
方法时收到通知(这会触发创建新的Foo
).那么为什么不发明一个ObservableAnswer
类:
Looks like you want to observe then Answer
instances and receive notfications each time the answer
method is called (which triggers the creation of a new Foo
). So why not invent an ObservableAnswer
class:
public abstract class ObservableAnswer implements Answer {
private Listener[] listeners; // to keep it very simple...
public ObservableAnswer(Listener...listeners) {
this.listeners = listeners;
}
@Override
public Object answer(InvocationOnMock invocation) {
Object answer = observedAnswer(invocation);
for (Listener listener:listeners) {
listener.send(answer);
}
return answer;
}
// we'll have to implement this method now
public abstract Object observedAnswer(InvocationOnMock invocation);
}
预期用途:
Listener[] myListenerns = getListeners(); // some magic (as usual)
when(mock.someMethod(anyString())).thenAnswer(new ObservableAnswer(myListeners) {
Object observedAnswer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
Object mock = invocation.getMock();
return new Foo(args[0])
}
});
这篇关于Mockito:有没有一种方法可以捕获存根方法的返回值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文