我創建了一個新的Android測試項目。我從https://code.google.com/p/powermock/downloads/list下載了powermock-mockito-junit-1-1.5.zip。我將所有庫添加到測試項目的libs
文件夾中。測試類是一個非常簡單的對象:如何在Android項目中使用PowerMock?
package com.test.test;
import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;
import android.util.Log;
@RunWith(PowerMockRunner.class)
public class TestTestAndroid {
public void testRuns() {
Log.e("test", "Test case is called");
}
}
然後,我嘗試從Eclipse運行項目或從命令行創建項目。我得到了同樣的錯誤:
Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description;
事實證明,無論是junit-4.8.2.jar
和mockito-all-1.9.5.jar
定義org.hamcrest.Description
。我必須加入Mockito罐子,原因很明顯 - 我需要Mockito。 Android提供了不同版本的JUnit,但它是舊版本,不包含@RunWith
註釋。
有人能回答如何使用powermock和中的Mockito的Android項目,沒有衝突org.hamcrest.Description
問題?
如果你不能在Android上使用PowerMock,你知道任何其他方式來存根Android上的靜態方法? – lowellk 2014-04-03 19:20:31
@lowellk有一個解決方法。有一個非靜態方法調用靜態方法,然後將其存根。例如,如果'HttpConstants.getUrl()'是一個靜態方法,則編寫另一個方法:'String getUrl(){return HttpConstants.getUrl();然後,您可以將該方法存根。 – 2014-07-12 21:49:45
+1 @ MattQuigley的提示 – 2014-07-24 00:31:55