Dostawcy treści testowych

Jeśli wdrażasz dostawcę treści do przechowywania i pobierania danych lub udostępniania danych innym aplikacjom, przetestuj go, aby upewnić się, że nie zachowuje się w nieoczekiwany sposób. Z tej lekcji dowiesz się, jak testować publicznych dostawców treści. Ta lekcja dotyczy również dostawców, dla których dostęp do aplikacji jest ustawiony jako prywatny.

Tworzenie testów integracji dla dostawców treści

Dostawcy treści umożliwiają dostęp do rzeczywistych danych użytkowników, dlatego ważne jest, aby testować dostawców w izolowanym środowisku testowym. Ta metoda pozwala uruchamiać je tylko na podstawie zależności danych ustawionych wyraźnie w przypadku testu. Oznacza to również, że testy nie modyfikują rzeczywistych danych użytkownika. Na przykład unikaj pisania testu, który się nie powiódł, ponieważ w poprzednim teście pozostały dane. I podobnie w trakcie testu nie należy dodawać ani usuwać rzeczywistych informacji kontaktowych dostawcy.

Aby przetestować dostawcę treści w izolacji, użyj klasy ProviderTestCase2. Ta klasa umożliwia używanie pozorowanych klas obiektów Androida, takich jak IsolatedContext i MockContentResolver, w celu uzyskiwania dostępu do informacji o plikach i bazach danych bez wpływu na rzeczywiste dane użytkownika.

Test integracji powinien być napisany jako klasa testowa JUnit 4. Więcej informacji o tworzeniu klas testowych JUnit 4 i używaniu asercji JUnit 4 znajdziesz w artykule Tworzenie klasy testowej jednostki lokalnej.

Aby utworzyć test integracji dla dostawcy treści, wykonaj te czynności:

  1. Utwórz klasę testową jako podklasę klasy ProviderTestCase2.
  2. Określ klasę AndroidJUnitRunner, którą AndroidX Test udostępnia jako domyślny program uruchamiający testy.
  3. Ustaw obiekt Context z klasy ApplicationProvider. Przykład znajdziesz w tym fragmencie kodu.

Kotlin


@Throws(Exception::class)
override fun setUp() {
  super.setUp()
  context = ApplicationProvider.getApplicationContext<Context>()
}

Java


@Override
protected void setUp() throws Exception {
  super.setUp();
  setContext(ApplicationProvider.getApplicationContext());
}

Jak działa ProviderTestCase2

Testujesz dostawcę z podklasą ProviderTestCase2. Ta klasa bazowa rozszerza AndroidTestCase, zapewniając platformę testową JUnit, a także metody testowania uprawnień aplikacji specyficzne dla Androida. Najważniejszą cechą tej klasy jest jej inicjowanie, która tworzy izolowane środowisko testowe.

Inicjacja

Inicjowanie odbywa się w konstruktorze elementu ProviderTestCase2, który wywołuje go we własnych konstruktorach. Konstruktor ProviderTestCase2 tworzy obiekt IsolatedContext, który umożliwia wykonywanie operacji na plikach i bazie danych, ale eliminuje inne interakcje z systemem Android. Operacje na plikach i bazie danych są wykonywane w katalogu, który jest lokalnym dla urządzenia lub emulatora i ma specjalny prefiks.

Następnie konstruktor tworzy obiekt MockContentResolver, który będzie używany jako resolver testu.

Wreszcie konstruktor tworzy instancję testowanego dostawcy. To zwykły obiekt ContentProvider, ale pobiera on wszystkie informacje ze środowiska z IsolatedContext, dlatego może działać tylko w izolowanym środowisku testowym. Wszystkie testy wykonane w klasie przypadku testowego są kierowane na ten izolowany obiekt.

Testy integracji dla dostawców treści przeprowadza się tak samo jak testy jednostkowe.

Co testować

Oto kilka wskazówek dotyczących testowania treści przez dostawców treści.

  • Testowanie za pomocą metod resolvera: nawet jeśli możesz utworzyć instancję obiektu dostawcy w ProviderTestCase2, zawsze warto przeprowadzić test z użyciem obiektu resolvera za pomocą odpowiedniego identyfikatora URI. Dzięki temu będziesz testować dostawcę przez wykonanie tej samej interakcji, której używałaby zwykła aplikacja.
  • Testowanie dostawcy publicznego jako umowy: jeśli chcesz, aby Twój dostawca był publiczny i dostępny dla innych aplikacji, przetestuj go jako umowę. Oto kilka przykładów:
    • Testuj za pomocą stałych, które Twój dostawca udostępnia publicznie. Poszukaj na przykład stałych, które odwołują się do nazw kolumn w jednej z tabel danych dostawcy. Powinny to być zawsze stałe określone publicznie przez dostawcę.
    • Przetestuj wszystkie identyfikatory URI oferowane przez dostawcę. Twój dostawca może zaoferować kilka identyfikatorów URI, z których każdy odnosi się do innego aspektu danych.
    • Przetestuj nieprawidłowe identyfikatory URI. Testy jednostkowe powinny celowo wywoływać dostawcę z nieprawidłowym identyfikatorem URI i szukać błędów. Dobry projekt dostawcy to zgłoszenie żądania IllegalArgumentException w przypadku nieprawidłowych identyfikatorów URI.
  • Testowanie standardowych interakcji z dostawcą: większość dostawców oferuje 6 metod dostępu: query(), insert(), delete(), update(), getType() i onCreate(). Testy powinny sprawdzić, czy wszystkie te metody działają.
  • Przetestuj logikę biznesową: jeśli dostawca treści implementuje logikę biznesową, musisz ją przetestować. Logika biznesowa obejmuje obsługę nieprawidłowych wartości, obliczenia finansowe lub arytmetyczne, eliminowanie lub łączenie duplikatów.