2013-04-04 3 views
0

mockito를 사용하여 특정 매개 변수로 해당 메서드가 호출되었는지 확인하고 싶습니다.mockito checking MethodInvocation

내 코드 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을 인스턴스에 확인할 수있는 방법이 있나요? 이 호출 메소드는 someCommand() 메소드에 대한 정보를 보유해야합니다.

답변

0

예. 실제로 코드라고 한 당신이 그 값을 삽입 할 것을 요구할 수있을

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

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

해당 얻기을이 간단한 경우를 들어

, 그냥 시험에 값 자체를 사용하는 아마 괜찮습니다 프로덕션 코드의 어딘가에 있습니다. 변경이 필요할 수도 있습니다.

verify 호출에 Matcher을 사용하는 경우 모든 곳에서 사용해야합니다. 이를 위해, 값 일치를위한 정규 (eq)있다 :

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

당신은 여기 필요하지 않습니다,하지만 당신의 방법은 당신이 any 정규 표현을 사용하고 싶었 다른 인자가 있다면, 당신은해야 할 것 그것.

+1

두 가지 유의 사항. 첫째, Mockito의 기본 확인 모드이므로'times (1)'을 쓸 필요가 없습니다. 'verify (mockedMethodInterceptor) .invoke (expectedInvocation);'라고 쓰면 충분합니다. 둘째로,'expectedInvocation'을 테스트를 실행할 때 발생하는 실제 호출과 비교하기 위해'equals' 메쏘드가 사용된다는 것을 명심하십시오. –