Я добавляю эту запись, так как думаю, что она может помочь программистам, которые хотят протестировать свой контент-провайдер.
Представьте, что ваш контент-провайдер называется MyProvider и что у вас есть класс контракта MyProviderContract, определяющий некоторые константы.
Прежде всего, вы напишите тестовый класс с именем MyProviderTestCase
, который наследуется от ProviderTestCase2<MyProvider>
. Вам нужно определить конструктор, который будет вызывать конструктор super
:
public MyProviderTestCase() {
super(MyProvider.class, MyProviderContract.AUTHORITY);
}
Затем, вместо непосредственного использования вашего провайдера (избегайте использования getProvider()
, поскольку пользователи вашего провайдера контента не будут обращаться к нему напрямую), используйте getMockContentResolver()
, чтобы получить ссылку на решатель контента, а затем вызовите методы этот преобразователь контента (query
, insert
и т. д.). В следующем коде я покажу, как проверить метод insert
.
public void testInsert() {
Uri uri = MyProviderContract.CONTENT_URI;
ContentValues values = new ContentValues();
values.put(MyProviderContract.FIELD1, "value 1");
values.put(MyProviderContract.FIELD2, "value 2");
Uri resultingUri = getMockContentResolver().insert(uri, values);
// Then you can test the correct execution of your insert:
assertNotNull(resultingUri);
long id = ContentUris.parseId(resultingUri);
assertTrue(id > 0);
}
Затем вы можете добавить столько методов тестирования, сколько захотите, используя распознаватель контента вместо поставщика контента напрямую, как это сделали бы пользователи вашего контент-провайдера.