2013-04-04 82 views
0

我想檢查使用mockito調用特定參數的方法。mockito檢查方法調用

我是我的代碼,每次調用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); 
} 

如果這能夠這實際上是由代碼調用一個可能會要求你注入該值在您的生產代碼中的某處。您可能需要進行更改,甚至可以做到這一點。

如果您在撥打verify時有任何使用Matcher的問題,您必須在任何地方使用它們。爲此,有匹配值的匹配(eq):

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

你不需要在這裏,但如果你的方法有,你想用一個any匹配另一種說法,你需要它。

+1

需要注意的兩件事。首先,你不需要寫'times(1)',因爲這是Mockito的默認驗證模式。這足以編寫'verify(mockedMethodInterceptor).invoke(expectedInvocation);'其次,請注意'equals'方法將用於比較'expectedInvocation'和運行測試時發生的實際調用。 – 2013-04-05 05:34:34