Sto scrivendo un ApplicationTestCase Android (TemperatureConverterApplicationTests esempio si trovano in Android Application Testing Guida da Diego T. Milano a pagina 171). L'esempio è stato scritto per Android 2.3 e non sembra funzionare per Android 4. Non è necessario conoscere il libro per capire il problema in quanto l'ho semplificato.AssertionFailedError in ApplicationTestCase.createApplication() nelle versioni più recenti di Android quando si utilizza MockContext
Questo funziona bene con Android 2.3.3 (API 10):
setContext(new MockContext());
createApplication();
[Per essere precisi un UnsupportedOperationException è gettato perché getPackageName() non è implementata. Ma questo è normale e può essere risolto utilizzando una sottoclasse di MockContext() che implementa getPackageName() e getSharedPreferences(). Questo non è pertinente perché il problema esiste ancora, anche dopo aver fatto questo.]
Il problema è che con Android 4.1.2 (API 16) non funziona. Ricevo un AssertionFailedError che tramite alcuni debug ho scoperto essere dovuto a una ClassCastException lanciata sulla linea 100 di ApplicationTestCase.
mApplication = (T) Instrumentation.newApplication(mApplicationClass, getContext());
Il ClassCastException messaggio è:
java.lang.ClassCastException: android.test.mock.MockContext cannot be cast to android.app.ContextImpl
Eventuali suggerimenti perché questo accade e come può essere evitato?
EDIT: questione connessa: Android ApplicationTestCase using a MockContext
Sto avendo lo stesso identico problema. Funziona bene usando una classe che estende RenamingDelegatingContext ma non un MockContext. Ho postato una domanda simile qui http://stackoverflow.com/questions/14205451/android-applicationtestcase-using-a-mockcontext. Risponderò se trovo qualcosa. – odiggity