Я заметил, что время от времени возникает вопрос об использовании Robolectric для тестирования пользовательских ContentProviders. Тем не менее, никогда не было конкретного и однозначного ответа о том, как это сделать должным образом. Я наткнулся на два разных подхода:
-
можно сказать, что вы можете просто создать экземпляр ContentProvider в памяти, который вы можете использовать для вставки и запроса данных (https://gist.github.com/anonymous/6139359)
-
другой говорящий, чтобы использовать ShadowContentResolver для установки данных курсорного курсора (https://groups.google.com/d/msg/robolectric/r35mMirIkTs/xJJBNXl_RgwJ)
Тем не менее, я получаю исключение java.lang.InstantiationException с обоими подходами. Были некоторые сообщения SO, в которых говорится, что это связано с тем, что SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java) не переопределяется в Robolectric (Android + Robolectric - исключение RuntimeException/InstantiationException в queryBuilder.query() в ContentProvider).
Я предполагаю, что мой вопрос: есть ли предпочтительные обходные пути, которые делают тестирование ContentProviders возможным. Или есть другие подходы, которые лучше, чем те, которые упомянуты выше.