Sto scrivendo alcuni test POJO per il mio codice Android.Test del codice Android con JUnit e JDK
Voglio eseguirli localmente con il JDK (non con Dalvik sull'emulatore) - per velocità, JUnit 4, Mockito, e poter girare senza headless senza un dispositivo - quindi ho un progetto "Java" separato in Eclisse.
Se il metodo che sto testando fa riferimento a qualsiasi cosa proveniente dall'SDK di Android, ad es. android.util.Log
, il test ha esito negativo - questo ha senso perché android.jar
non si trova nel classpath. Per riprodurre Ho questo banco di prova:
public class FooTests {
@Test
public void testFoo() {
android.util.Log.d("x", "y");
}
}
Se aggiungo android.jar
esplicitamente al classpath del progetto di test, ho eccezioni come
java.lang.RuntimeException: Stub!
at android.util.Log.d(Log.java:7)
at com.example.FooTests.testFoo(FooTests.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
c'è un modo per rendere il codice di lavoro senza beffardo fuori ogni ultimo bit della dipendenza da Android SDK? Forse uno stordito android.jar
esiste già?
EDIT: Per ora ho finito per il confezionamento classi come android.util.Log
e iniettare le istanze, per il test classico IOC-based. Il suggerimento di Scott PowerMock è il mio prossimo passo quando ne avrò bisogno.
LATER EDIT: Robolectric!
+1 Buoni punti, proverò PowerMock. Qualsiasi link pertinente oltre https://sites.google.com/site/androiddevtesting/? – orip
Non ho visto quel collegamento prima, ma è eccellente, grazie per la condivisione. Mi trovo spesso a riferire la sezione "utilizzo" di Powermock sul loro sito web quando si cerca di capire i vari modi necessari per deridere le classi di jar Android: http://code.google.com/p/ powermock /. – Scott