AssertionFailedError w ApplicationTestCase.createApplication () w nowszych wersjach Androida przy użyciu MockContext

Piszę Android ApplicationTestCase (przykład TemperatureConverterApplicationTests znaleziony wPrzewodnik testowania aplikacji na Androida Diego T. Milano na stronie 171). Przykład został napisany dla Androida 2.3 i wydaje się, że nie działa dla Androida 4. Nie musisz znać książki, aby zrozumieć problem, ponieważ ja ją uprościłem.

To działa dobrze zAndroid 2.3.3 (API 10):

setContext(new MockContext());
createApplication();

[Dokładnie wyjątek UnsupportedOperationException jest generowany, ponieważ getPackageName () nie jest zaimplementowany. Ale jest to normalne i można je rozwiązać, używając podklasy MockContext (), która implementuje getPackageName () i getSharedPreferences (). Nie jest to istotne, ponieważ problem nadal istnieje nawet po wykonaniu tej czynności.]

Problem polega na tymAndroid 4.1.2 (API 16) to nie działa. Dostaję błąd AssertionFailedError, który dzięki pewnym debugowaniu okazał się być spowodowany wyrzuceniem klasy ClassCastException w linii 100 ApplicationTestCase.

mApplication = (T) Instrumentation.newApplication(mApplicationClass, getContext());

TheClassCastException wiadomość brzmi:

java.lang.ClassCastException: android.test.mock.MockContext cannot be cast to android.app.ContextImpl

Wszelkie sugestie, dlaczego tak się dzieje i jak można tego uniknąć?

EDYCJA: Powiązane pytanie:Android ApplicationTestCase za pomocą MockContext

questionAnswers(2)

yourAnswerToTheQuestion