0

我想检查是否使用 mockito 使用特定参数调用了该方法。

我的代码,每次unit.permission().someCommand()被调用时,拦截器的方法invoke都会被调用。invoke方法如下所示:

void invoke(MethodInvocation methodInvocation) ..

这是一个测试,我检查拦截器的方法是否被调用。

@Test
public void permission() throws Throwable {
    unit.permission().someCommand();

    verify(mockedMethodInterceptor, times(1)).invoke(any(MethodInvocation.class));
}

如您所见,在此测试中,我使用了 MethodInvocation 的任何实例。

问题:

有没有办法检查特定的 MethodInvocation 实例以确保使用正确的参数调用了 invoke() 方法?此调用方法应保存有关 someCommand() 方法的信息。

4

1 回答 1

0

是的。

对于这个简单的情况,在测试中使用值本身可能是可以的:

@Test
public void permission() throws Throwable {
    MethodInvocation expectedInvocation = makeItHoweverYouDo();
    unit.permission().someCommand();

    verify(mockedMethodInterceptor, times(1)).invoke(expectedInvocation);
}

让它成为你的代码实际调用的那个可能需要你在生产代码的某个地方注入这个值。您可能需要进行更改才能使之成为可能。

如果您在通话中使用了Matchers,则必须在任何地方使用它们。verify为此,有一个匹配器 ( eq) 用于匹配一个值:

    verify(mockedMethodInterceptor, times(1)).invoke(eq(expectedInvocation));

你在这里不需要它,但如果你的方法有另一个参数,你想使用any匹配器,你就需要它。

于 2013-04-04T21:24:06.390 回答