dodać ten wpis, jak myślę, to może pomóc programistom, którzy chcą przetestować dostawcę treści.
Wyobraź sobie, że Twój dostawca treści nazywa się MyProvider i posiadasz klasę kontraktu o nazwie MyProviderContract definiującą pewne stałe.
Przede wszystkim napiszesz klasę testową o nazwie MyProviderTestCase
, która dziedziczy po ProviderTestCase2<MyProvider>
. Musisz określić konstruktor, który wywoła konstruktor super
:
public MyProviderTestCase() {
super(MyProvider.class, MyProviderContract.AUTHORITY);
}
Wtedy, zamiast korzystać bezpośrednio z dostawcą (unikać getProvider()
jak użytkownicy dostawcy zawartości nie będzie do niego dostęp bezpośrednio), użyj getMockContentResolver()
w celu uzyskania odwołania do narzędzia do rozpoznawania zawartości, a następnie wywołania metod tego narzędzia do rozpoznawania zawartości (query
, insert
itd.). W poniższym kodzie pokazuję, jak przetestować metodę 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);
}
Następnie można dodać dowolną liczbę metod badawczych, jak chcesz, używając zawartości rozpoznawania nazw zamiast dostawcy treści bezpośrednio, jak zrobiłby użytkownikom dostawcy treści.
Nie ma zbyt wiele przykładowego kodu na stronie ProviderTestCase2 w Internecie. To jest bardzo pomocne. – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
W [Dokumentacja Androida] (http://developer.android.com/tools/testing/contentprovider_testing.html#WhatToTest) zalecają, aby nie używać bezpośrednio dostawcy zawartości i zamiast tego przechodzić przez program do rozpoznawania zawartości. Po prostu przeczytaj mój post, aby zobaczyć bardziej odpowiedni przykład, jak przetestować dostawcę treści. – eternay