我希望使用when(spy).thenAnswer(new Answer())方法,但似乎thenAnswer方法只适用于mock而不适用于spy。
我想使用spy,因为我只想stub特定的方法。
有没有一种方法可以对spy对象进行答案操作?
有没有一种方法可以对spy对象进行答案操作?
但是,再次根据doc所述:关于监视真实对象的重要提示!
有时候,对于间谍的存根而言,使用when(Object)是不可能或不切实际的。因此,在使用间谍时,请考虑使用doReturn|Answer|Throw()系列的方法进行存根。
你的方法是空的吗?存根空值需要与when(Object)采用不同的方法,因为编译器不喜欢括号内的空方法...
doAnswer(new Answer() {
public Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
Mock mock = invocation.getMock();
return null;
}
}).when(mock).someMethod();
MyObject spy = spy(myObject);
doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
return null;
}
}).when(spy).notify();
或者如果它不是空的:
when(spy.toString()).thenAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
return "this";
}
});
doAnswer.(new Answer<T>() {..}).when(spy).method()
而不是!!!
when(spy.method()).thenAnswer(new Answer<T>() {..})
谢谢