Piszę Android ApplicationTestCase (przykład TemperatureConverterApplicationTests znaleźć w Android Application Testing Guide Diego T. Milano na stronie 171). Przykład został napisany dla systemu Android 2.3 i nie wydaje się działać na systemie Android 4. Nie musisz znać książki, aby zrozumieć problem, ponieważ go uprościliśmy.AssertionFailedError w ApplicationTestCase.createApplication() w nowszych wersjach Androida przy użyciu MockContext
To działa prawidłowo z Android 2.3.3 (API 10):
setContext(new MockContext());
createApplication();
[Aby być precyzyjnym UnsupportedOperationException jest generowany, ponieważ getPackageName() nie jest realizowany. Ale jest to normalne i można je rozwiązać, używając podklasy MockContext(), która implementuje metody getPackageName() i getSharedPreferences(). Nie ma to znaczenia, ponieważ problem nadal występuje nawet po wykonaniu tej czynności.]
Problem polega na tym, że z Android 4.1.2 (API 16) to nie działa. Otrzymuję AssertionFailedError, że poprzez niektóre debugowania okazało się, ze względu na wyjątek ClassCastException wyrzucane na linii 100 z ApplicationTestCase.
mApplication = (T) Instrumentation.newApplication(mApplicationClass, getContext());
ClassCastException komunikat:
java.lang.ClassCastException: android.test.mock.MockContext cannot be cast to android.app.ContextImpl
sugestie dlaczego tak się dzieje i jak można go uniknąć?
EDIT: Podobne pytanie: Android ApplicationTestCase using a MockContext
Mam dokładnie ten sam problem. Działa dobrze przy użyciu klasy, która rozszerza RenamingDelegatingContext, ale nie MockContext. Podobne pytanie opublikowałem tutaj http://stackoverflow.com/questions/14205451/android-applicationtestcase-using-a-mockcontext. Odpowiem, jeśli coś znajdę. – odiggity