Android ApplicationTestCase を作成しています ( Diego T. Milano によるAndroid アプリケーション テスト ガイドの 171 ページにある TemperatureConverterApplicationTests の例)。この例は Android 2.3 用に作成されたもので、Android 4 では機能しないようです。単純化したので、問題を理解するためにこの本を知っている必要はありません。
これはAndroid 2.3.3 (API 10)で正常に動作します。
setContext(new MockContext());
createApplication();
[正確には、getPackageName() が実装されていないため、UnsupportedOperationException がスローされます。しかし、これは正常なことであり、getPackageName() と getSharedPreferences() を実装する MockContext() のサブクラスを使用することで解決できます。これを行った後でも問題がまだ存在するため、これは関係ありません。]
問題は、Android 4.1.2 (API 16) では機能しないことです。ApplicationTestCase の 100 行目で ClassCastException がスローされたことが原因であることが、デバッグによって判明した AssertionFailedError を受け取りました。
mApplication = (T) Instrumentation.newApplication(mApplicationClass, getContext());
ClassCastExceptionメッセージは次のとおりです。
java.lang.ClassCastException: android.test.mock.MockContext cannot be cast to android.app.ContextImpl
なぜこれが起こるのか、どうすれば回避できるのか、何か提案はありますか?
編集: 関連する質問: MockContext を使用した Android ApplicationTestCase