在mockito中使用doThrow()doAnswer()doNothing()和doReturn()的用法
我正在学习mockito,我从链接中了解了上述function的基本用法。
但我想知道它是否可以用于任何其他情况?
doThrow :在模拟对象中调用方法时想要抛出exception时使用。
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参数与参数进行交互。 此外,answer方法的返回值将是模拟方法的返回值。
public ReturnValueObject quickChange(Object1 object); Mockito.doAnswer(new Answer() { @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 :是最简单的列表,基本上它告诉Mockito在调用模拟对象中的方法时什么也不做。 有时用于void返回方法或没有副作用的方法,或者与您正在进行的unit testing无关。
public void updateRequestActionAndApproval(final List cmItems); Mockito.doNothing().when(pagLogService).updateRequestActionAndApproval( Matchers.any(Object1.class));
这取决于您想要与之交互的测试双重类型:
- 如果您不使用doNothing并且模拟对象,则不会调用实际方法
- 如果你不使用doNothing并且你监视一个对象,那么就会调用真正的方法
换句话说,通过模拟,与协作者的唯一有用的交互是您提供的。 默认情况下,函数将返回null,void方法不执行任何操作。
如果您正在测试逻辑类并且它正在调用一些内部void方法,则doNothing是完美的。