Запрос с использованием MockContentResolver приводит к исключению NullPointerException

У нас есть тестовый класс JUnit, который расширяетActivityInstrumentationTestCase2<CommentActivity>, Тест (и класс, который мы тестируем) используютCommentContentProvider, который расширяетContentProvider, чтобы получить доступ к базе данных SQLite, и мы получаемNullPointerException [трассировка полного стека ниже] при выполнении запроса к провайдеру.

Мы создаемMockContentResolver как показано:

MockContentResolver mResolver;

public void setUp() {
    super.setUp();
    CommentContentProvider ccp = new CommentContentProvider();
    mResolver = new MockContentResolver();
    mResolver.addProvider(CommentContentProvider.AUTHORITY, ccp);
}

Позже, в наших тестах, при вызове следующего кода мы получимNullPointerException:

Cursor mCursor = mResolver.query(Uri.parse(mUri), null, null, null, null);

Мы получаем тот же результат, даже если мы ждем, чтобы создать экземплярMockContentResolver пока у нас не будет копии тестируемой деятельности:

mActivity = getActivity();
MockContentResolver mResolver = new MockContentResolver(mActivity);

Мы убедились, чтоmActivity не является нулевым

Коллега прошелся по источнику Android (не установленному в нашей системе) и обнаружил, что непосредственной причиной ошибки является то, чтоgetContext() возвращает ноль напервая строка ContentProvider.enforceReadPermissionInner ().

Мы взглянули наэтот вопрос который первоначально казался похожим, но я думаю, что это была совсем другая проблема.Этот вопрос является также похожим симптомом проблемы, но они неMockContentResolver, У нас проблемы с созданием нашего экземпляра.

Вот трассировка стека, которую мы получаем:

java.lang.NullPointerException
at android.content.ContentProvider$Transport.enforceReadPermissionInner(ContentProvider.java:449)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:394)
at android.content.ContentProvider$Transport.query(ContentProvider.java:194)
at android.content.ContentResolver.query(ContentResolver.java:461)
at android.content.ContentResolver.query(ContentResolver.java:404)
at packagename.test.FooActivityTest.getNumCommentsForRecipient(FooActivityTest.java:84)
at packagename.test.FooActivityTest.testCommentEntryInternal(FooActivityTest.java:91)
at packagename.test.FooActivityTest.testCommentEntry1(FooActivityTest.java:108)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.access$000(InstrumentationTestCase.java:36)
at android.test.InstrumentationTestCase$2.run(InstrumentationTestCase.java:189)
at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:1719)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4998)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
at dalvik.system.NativeStart.main(Native Method)

Как мы можем решить эту проблему?

Ответы на вопрос(1)

Ваш ответ на вопрос