模拟方法返回一个参数

时间:2014-03-23 15:22:52

标签: java unit-testing junit mockito

我尝试使用其中一个参数模拟返回值,这样:

    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 提前感谢您的帮助。

1 个答案:

答案 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());