2011-09-06 62 views
55

我想通過我和Mockito之間的磚牆崩潰。我已經把我的頭髮撕了,試圖得到正確的導入靜態聲明Mockito的東西。你會想到會有人只是扔了一張桌子說anyInt()來自org.mockito.Matchers當()來自org.mockito.Mockito,等等,但是這將是對新人有幫助,不是嗎?尋找導入Mockito構造的靜態語句

這樣的事情,在星號結尾的無數多個import語句混合尤其是並不總是非常有幫助:

import static org.junit.Assert.*; 
import static org.mockito.Mockito.*; 

是的,我知道,並已嘗試使用Eclipse的Window - > Preferences-> Java - > Editor-> Content Assist - > Favorites機制。它有幫助,但它不會擊中頭部。

任何回答這個問題將不勝感激。

非常感謝, 拉斯

+0

對不起圍繞挺舉社區:我的原帖還問了另一個問題,但我發現由於缺少括號,我的代碼出現了問題,所以我刪除了這一點。 –

+0

你正在尋找一個cheatsheet?我們可以鞭打一個? api有什麼缺陷? http://mockito.googlecode.com/svn/branches/1.6/javadoc/index.html?org/mockito/Matchers.html –

+2

所以,你必須明白,我宗教上避免在進口報表中的星號,因爲看到那種代碼頂部的東西只是意味着無法知道符號來自哪裏,因此無法計算出我的項目中包含哪些JAR。在瀏覽器中搜索Javadoc對於查找符號來說不是太好。是的,一張備忘單會非常好,但作爲一個剛剛討論過的同事,這是您認爲Java社區現在可以解決的問題之一。謝謝 - 讓我知道如果你做一個。 –

回答

15

的問題是,從Hamcrest和靜態的Mockito進口具有相似的名稱,但分別返回匹配器和實際值。

一個解決方法是簡單地複製Hamcrest和/或Mockito類,並刪除/重命名靜態函數,以便它們更易於記憶,並且在自動完成時更少出現。這就是我所做的。另外,當使用模擬時,我儘量避免使用assertThat而使用其他的其他模式assertionsverify,例如assertionsverify

assertEquals(1, 1); 
verify(someMock).someMethod(eq(1)); 

,而不是

assertThat(1, equalTo(1)); 
verify(someMock).someMethod(eq(1)); 

如果您從您的收藏夾在Eclipse中刪除類,例如鍵入了長名稱org.hamcrest.Matchers.equalTo並按CTRL + SHIFT + M來添加導入,然後自動完成將只顯示Hamcrest匹配器,而不是任何Mockito匹配器。而且只要不混合匹配者,你可以用其他方式來完成。

+1

是的,你已經釘住了我的一個投訴,作爲一個新手:我不確定接口來自哪裏(JUnit,模擬框架,Hamcrest等)。我花更多時間試圖從JAR中拼湊項目,而不是我真的應該不得不(我從來沒有回到從庫和頭文件定位C接口的日子)。 –

+0

你爲什麼避免斷言可能會更有說服力:我還沒有足夠強硬的想法,但我現在只是試圖用嘲諷寫作測試,而驗證對我來說是新事物。謝謝。 –

+0

好的,我有另一個解決方案給你。希望有所幫助! –

85

以下是我一直在努力應對的情況。

我在新的測試類上使用全局導入。

import static org.junit.Assert.*; 
import static org.mockito.Mockito.*; 
import static org.mockito.Matchers.*; 

當您完成編寫測試並需要提交時,您只需按CTRL + SHIFT + O即可組織軟件包。例如,你可能只是會留下:

import static org.mockito.Mockito.doThrow; 
import static org.mockito.Mockito.mock; 
import static org.mockito.Mockito.verify; 
import static org.mockito.Mockito.when; 
import static org.mockito.Matchers.anyString; 

這可以讓你遠離代碼沒有得到「卡住」試圖找到正確的包導入。

+6

如果我可以的話,我會贊成這兩次! – Justin

+0

對於Mac用戶,而不是CTRL + SHIFT + O做[command + shift + O](https://blog.codecentric.de/en/2012/08/my-top-10-shortcuts-for-eclipse-on -mac-os-x-and-windows-how-you-survive-the-change-from-windows-to-mac /#comment-165299) –

+0

永久使用諸如import static org之類的東西有什麼缺點。junit.Assert。*;'在你的測試類中(不是用'ctrl' +'shift' +'O'來代替它們)? – mkasberg

0

對於是()

import static org.hamcrest.CoreMatchers.*; 

對於assertThat()

import static org.junit.Assert.*; 

因爲當()和驗證()

import static org.mockito.Mockito.*;