我尝试使用其中一个参数模拟返回值,这样:
when( myService.saveMyEntity( TENANT_ID, DEFAULT_USER, Mockito.any( MyEntity.class ) ) ).thenAnswer(
new Answer<MyEntity>() {
@Override
public MyEntity answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
return (MyEntity) args[2];
}
} );
但是我收到了以下错误:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 参数匹配器的使用无效! 3匹配预期,1记录:
问题是什么?怎么回事? 我正在使用mockito 1.9.5 提前感谢您的帮助。
答案 0 :(得分:1)
您可以使用匹配器来获取saveMyEntity
方法的所有参数,也可以不使用任何参数。您可以将其更改为:
when(myService.saveMyEntity(eq(TENANT_ID), any(User.class), any(MyEntity.class))).thenAnswer(
new Answer<MyEntity>() {
@Override
public MyEntity answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
return (MyEntity) args[2];
}
} );
此外,正如@ JBNizet的评论所述,由于你从答案中返回了最后一个参数,你可以使用AdditionalAnswers.returnsLastArg()
工厂方法:
when(myService.saveMyEntity(eq(TENANT_ID), any(User.class), any(MyEntity.class))).thenAnswer(AdditionalAnswers.returnsLastArg());