doThrow() doAnswer() doNothing() 和 doReturn() 在 mockito 中的用法
我正在学习mockito,我从链接中了解了上述函数的基本用法。
但我想知道它是否可用于任何其他情况?
我正在学习mockito,我从链接中了解了上述函数的基本用法。
但我想知道它是否可用于任何其他情况?
doThrow :基本上用于在模拟对象中调用方法时要引发异常的情况。
public void validateEntity(final Object object){}
Mockito.doThrow(IllegalArgumentException.class)
.when(validationService).validateEntity(Matchers.any(AnyObjectClass.class));
doReturn :当您希望在执行方法时发回返回值时使用。
public Socket getCosmosSocket() throws IOException {}
Mockito.doReturn(cosmosSocket).when(cosmosServiceImpl).getCosmosSocket();
doAnswer:有时您需要使用传递给方法的参数执行一些操作,例如,添加一些值,进行一些计算甚至修改它们 doAnswer 为您提供了 Answer<?>在调用该方法时执行的接口,此接口允许您通过 InvocationOnMock 参数与参数进行交互。此外,答案方法的返回值将是模拟方法的返回值。
public ReturnValueObject quickChange(Object1 object);
Mockito.doAnswer(new Answer<ReturnValueObject>() {
@Override
public ReturnValueObject answer(final InvocationOnMock invocation) throws Throwable {
final Object1 originalArgument = (invocation.getArguments())[0];
final ReturnValueObject returnedValue = new ReturnValueObject();
returnedValue.setCost(new Cost());
return returnedValue ;
}
}).when(priceChangeRequestService).quickCharge(Matchers.any(Object1.class));
doNothing:(来自文档)使用 doNothing() 将 void 方法设置为不执行任何操作。请注意,默认情况下,模拟上的 void 方法不会执行任何操作!但是,在极少数情况下,doNothing() 会派上用场:
对 void 方法的存根连续调用:
doNothing().
doThrow(new RuntimeException())
.when(mock).someVoidMethod();
//does nothing the first time:
mock.someVoidMethod();
//throws RuntimeException the next time:
mock.someVoidMethod();
当您监视真实对象并希望 void 方法不执行任何操作时:
List list = new LinkedList();
List spy = spy(list);
//let's make clear() do nothing
doNothing().when(spy).clear();
spy.add("one");
//clear() does nothing, so the list still contains "one"
spy.clear();
这取决于您要与之交互的测试替身的类型:
换句话说,通过嘲笑,与协作者的唯一有用的交互是你提供的交互。默认情况下,函数将返回 null,void 方法不执行任何操作。