2013-04-04 3 views
0

Я хотел бы проверить, что метод был вызван с определенным параметром, используя mockito.проверка mockito MethodInvocation

I мой код, каждый раз, когда вызывается unit.permission().someCommand(), с ним также будет вызываться метод intercetor 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().

ответ

0

Да.

Для этого простого случая, это, вероятно, хорошо просто использовать само значение в тесте:

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

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

Getting что быть тот, который на самом деле называется ваш код может потребовать, чтобы Вы вводите это значение где-то в вашем производственном коде. Возможно, вам потребуются изменения, чтобы сделать это возможным.

Если у вас есть использование Matcher s в вашем звонке verify, вы должны использовать их везде. Для этой цели есть согласовани (eq) для согласования значения:

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

Вам не нужно здесь, но если ваш метод был еще один аргумент, в котором вы хотели использовать any Искатель, вам нужно Это.

+1

Две вещи, чтобы отметить. Во-первых, вам не нужно писать 'times (1)', так как это режим проверки по умолчанию для Mockito. Достаточно написать 'verify (mockedMethodInterceptor) .invoke (expectedInvocation);' Во-вторых, имейте в виду, что метод 'equals' будет использоваться для сравнения« expectedInvocation »с реальным вызовом, который возникает при запуске теста. –