Ho creato un nuovo progetto di test Android. Ho scaricato powermock-mockito-junit-1-1.5.zip da https://code.google.com/p/powermock/downloads/list. Ho aggiunto tutte le librerie alla cartella libs
del progetto di test. La classe di test è un oggetto molto semplice:Come utilizzare PowerMock nei progetti Android?
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");
}
}
Poi, ho provare a eseguire il progetto da Eclipse, o fare il progetto dalla riga di comando. Ottengo lo stesso errore:
Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description;
Come si è visto, sia junit-4.8.2.jar
e mockito-all-1.9.5.jar
definiscono org.hamcrest.Description
. Devo includere il barattolo di Mockito per ovvi motivi: ho bisogno di Mockito. Una versione diversa di JUnit è fornita da Android, ma è una vecchia versione che non include l'annotazione @RunWith
.
Qualcuno può rispondere a come utilizzare powermock e mockito in un progetto Android, senza il problema in conflitto org.hamcrest.Description
?
Se non è possibile utilizzare PowerMock su Android, sai un altro modo per bloccare un metodo statico su Android? – lowellk
@lowellk C'è una soluzione alternativa. Avere un metodo non statico chiama il metodo statico, quindi lo stub. Ad esempio, se 'HttpConstants.getUrl()' è un metodo statico, scrivere un altro metodo: 'String getUrl() {return HttpConstants.getUrl(); } 'Quindi, puoi stubare quel metodo. –
+1 per @ suggerimento di MattQuigley –