我正在编写一个 Android ApplicationTestCase(TemperatureConverterApplicationTests 示例,可在Diego T. Milano 第 171 页的Android 应用程序测试指南中找到)。该示例是为 Android 2.3 编写的,它似乎不适用于 Android 4。您不必了解这本书就可以理解问题,因为我已经对其进行了简化。
这适用于Android 2.3.3 (API 10):
setContext(new MockContext());
createApplication();
[准确地说,抛出 UnsupportedOperationException 是因为 getPackageName() 没有实现。但这是正常的,可以通过使用实现 getPackageName() 和 getSharedPreferences() 的 MockContext() 子类来解决。这无关紧要,因为即使在这样做之后问题仍然存在。]
问题是Android 4.1.2 (API 16) 无法正常工作。我得到一个 AssertionFailedError,通过一些调试我发现这是由于在 ApplicationTestCase 的第 100 行抛出了 ClassCastException。
mApplication = (T) Instrumentation.newApplication(mApplicationClass, getContext());
ClassCastException消息是:
java.lang.ClassCastException: android.test.mock.MockContext cannot be cast to android.app.ContextImpl
有什么建议为什么会发生这种情况以及如何避免这种情况?