在使用MockContext的较新的Android版本中,ApplicationTestCase.createApplication()中的AssertionFailedError

前端之家收集整理的这篇文章主要介绍了在使用MockContext的较新的Android版本中,ApplicationTestCase.createApplication()中的AssertionFailedError前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在第171页写了一个 Android ApplicationTestCase(TemperatureConverterApplicationTests示例,由Diego T. Milano的Android应用程序测试指南中找到).该示例是针对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)它不起作用.我得到一个AssertionFailedError通过一些调试我发现是由于ClassCastException被抛出在第100行的ApplicationTestCase.

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

ClassCastException消息是:

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

任何建议为什么会发生这种情况以及如何避免?

编辑:相关问题:Android ApplicationTestCase using a MockContext

解决方法

我也得到这个行为.我通过扩展ContextWrapper来解决它:
public class RenamingMockContext extends RenamingDelegatingContext
{
    private static final String PREFIX = "test.";

    public RenamingMockContext(Context context)
    {
        super(new ContextWrapper(context),PREFIX);
    }

    @Override
    public String getPackageName()
    {
        return PREFIX + super.getPackageName();
    }
}
原文链接:https://www.f2er.com/android/311945.html

猜你在找的Android相关文章