2012-12-30 68 views
7

我有我的項目設置的Mockito這個行家行:方法的Mockito無法訪問

<dependency> 
    <groupId>org.mockito</groupId> 
    <artifactId>mockito-all</artifactId> 
    <version>1.8.5</version> 
    <scope>test</scope> 
</dependency> 

我沒有問題使用@Mock註解,但是我不能訪問和使用方法的Mockito像:

when(someMock.someMethod()).thenReturn(); 

Eclipse只是不認識他們。

請幫忙。

+1

是否包含正確的靜態導入? –

+0

那些是什麼? –

+1

import static org.mockito.Mockito。*; –

回答

24

嘗試調用Mockito.when(foo.getBar()).thenReturn(baz)Mockito.verify(foo).getBar(),這將不依賴靜態導入。不像@Mock註釋,這在技術上是一個類,whenverify是Mockito類的靜態方法。

一旦你的工作,然後再嘗試靜態導入到大衛提到:

import static org.mockito.Mockito.when; // ...or... 
import static org.mockito.Mockito.*;  // ...with the caveat noted below. 

這一操作將允許您使用Mockito.when不指定Mockito類。您也可以使用通配符,但按this SO answerJava docs建議謹慎使用通配符 - 尤其是因爲如果稍後將相同名稱的靜態方法添加到Mockito中,則可能會中斷。

添加import org.mockito.*;是不夠的,因爲它增加了org.mockito包中的所有類,但不包括org.mockito.Mockito上的方法。

對於Eclipse尤其是,您可以通過將光標放在when部分Mockito.when上並按下Control-Shift-M(「添加導入」)來添加靜態導入。您還可以將org.mockito.Mockito添加到您的收藏夾(窗口>首選項> Java>編輯器>內容輔助>收藏夾>新類型),以便所有Mockito靜態方法都顯示在Ctrl-Space內容輔助提示中,即使您沒有專門導入它們。 (您也可以爲org.mockito.Matchers執行此操作,它通過繼承技術在org.mockito.Mockito上可用,但由於這個原因可能不會在Eclipse中顯示。)

+0

對於內容幫助提示。這對我有效。 – Traxex1909

+0

針對內容輔助的額外提示+1:由於繼承問題而增加了org.mockito.Matchers –