mockito检查MethodInvocation

时间:2013-04-04 20:54:10

标签: java proxy mockito interceptor

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

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

void invoke(MethodInvocation methodInvocation) ..

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

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

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

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

问题:

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

1 个答案:

答案 0 :(得分:0)

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

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

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

成为您的代码实际调用的那个可能需要您在生产代码中的某处注入该值。您甚至可能需要进行更改才能实现这一目标。

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

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

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