我想在我的單元測試(JUnit 4.12)中使用PowerMock。PowerMock + Mockito + Maven Android應用程序顯示Dex加載器錯誤
我已經有了Mockito,沒有任何問題。 這是一個Android應用程序。
當我運行我的單元測試時,沒有任何問題和靜態函數的模擬完美。
當我在Eclipse中的「播放」按鈕即可運行我的連接在物理機上的應用程序,我收到此錯誤:
[2015-01-15 15:22:22 - Dex Loader] Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description;
[2015-01-15 15:22:22 - CLAP] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description;
我已閱讀,這意味着PowerMock不支持Delvik VM,但我不明白這意味着什麼,我不相信PowerMock團隊或Mockito團隊沒有找到在Android環境中工作的方式!
這是我在Maven依賴關係PowerMock和
的Mockito <dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.6.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.6.1</version>
<scope>test</scope>
</dependency>
任何人可以幫助我嗎?
編輯
我敢肯定,我需要做的是,當我運行我的應用從我的依賴性刪除PowerMock實(未測試),但我不知道如何去做這個。我使用Eclipse,所以我需要一個可以在這個環境中工作的解決方案。我已經檢查過Maven的配置文件和排除,但我看不到如何實現這一點。我對maven很陌生。任何幫助將不勝感激。另外,當我刪除PowerMock依賴項(以及所有使用它的單元測試)時,項目現在可以在我的設備上運行而沒有問題。
EDIT 2
用命令mvn dependency:list
的幫助中的評論所說,我已經發現了這一點:
- 的JUnit對org.hamcrest的依賴:hamcrest核心: jar:1.3:test
- PowerMock還對hamcrest庫有依賴關係
看來問題只有在項目中使用的庫的最新版本時纔會發生。我試圖刪除JUnit的依賴,只使用powermock和啓動時的錯誤是一樣的。所以我不認爲這是一個「碰撞」問題,但可能與hammrest版本與powermock的問題?而且我不知道爲什麼它的使用在發射,因爲它是在「測試」範圍......
編輯3 我從與Maven從頭開始創建一個Android項目,看它是否與我的主要應用程序的問題或與Maven合作。問題似乎在Maven或PowerMock依賴中。如果你想嘗試,here is the complete java project。在這個項目中沒有單元測試,我只想在我的Android機器上運行它。我仍然收到完全相同的訊息。
這是器樂或robolectric測試? –
如果您在控制檯'mvn -o dependency:list \ |運行控制檯,您是否看到harmcrest重複的依賴項? grep「:。*:。*:。*」\ | cut -d] -f2- \ | sed's /:[a-z] * $ // g'\ |排序-u' –
這是一個Android應用程序。我使用單元測試(在Windows機器上)。當我運行該應用程序時,它運行在Android設備上。所以我想這不是儀器或roblectric測試(不知道這是什麼) –