Contentanbieter testen

Wenn Sie einen Contentanbieter zum Speichern und Abrufen von Daten implementieren oder Daten für andere Apps zugänglich zu machen, sollten Sie Ihren Anbieter testen, um sicherzustellen, dass es sich nicht unerwartet verhält. In dieser Lektion wird beschrieben, wie Sie sowie für Anbieter, deren Daten privat bleiben, für Ihre eigene App.

Integrationstests für Contentanbieter erstellen

Contentanbieter ermöglichen Ihnen den Zugriff auf tatsächliche Nutzerdaten. Daher ist es wichtig, Contentanbieter in einer isolierten Testumgebung testen. Dieses können Sie Datenabhängigkeiten nur ausführen, die explizit im Testfall. Es bedeutet auch, dass durch die Tests keine tatsächlichen Nutzerdaten geändert werden. Für Sie sollten beispielsweise einen Test nicht schreiben, der fehlschlägt, weil noch Daten übrig sind, im Vergleich zu einem früheren Test. Ebenso sollte Ihr Test das Hinzufügen oder Löschen Kontaktinformationen bei einem Anbieter.

Wenn du deinen Contentanbieter isoliert testen möchtest, verwende das ProviderTestCase2 . Mit dieser Klasse können Sie Android-Modellobjektklassen wie IsolatedContext und MockContentResolver, um auf Datei zuzugreifen und ohne Auswirkungen auf die tatsächlichen Nutzerdaten zu haben.

Dein Integrationstest sollte als JUnit 4-Testklasse geschrieben werden. Weitere Informationen zum Erstellen von JUnit 4-Testklassen und zur Verwendung von JUnit 4-Assertions finden Sie unter Ein Local Unit Test-Klasse.

Um einen Integrationstest für deinen Contentanbieter zu erstellen, musst du Folgendes ausführen: Schritte:

  1. Erstellen Sie die Testklasse als abgeleitete Klasse von ProviderTestCase2.
  2. Gib die AndroidJUnitRunner-Klasse an, die von AndroidX Test bereitgestellt wird als Standard-Test-Runner festlegen.
  3. Legen Sie das Objekt Context aus der Klasse ApplicationProvider fest. Weitere Informationen finden Sie in der Snippet unten ein Beispiel.

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());
}

So funktioniert ProviderTestCase2

Sie testen einen Anbieter mit der abgeleiteten Klasse ProviderTestCase2. Diese Basisklasse erweitert AndroidTestCase und stellt daher das JUnit-Test-Framework als sowie Android-spezifische Methoden zum Testen von App-Berechtigungen. Die meisten Ein wichtiges Merkmal dieser Klasse ist ihre Initialisierung, die den isolierten Testumgebung.

Initialisierung

Die Initialisierung erfolgt im Konstruktor für ProviderTestCase2, die abgeleiteten Klassen in ihren eigenen Konstruktoren aufrufen. Das ProviderTestCase2 -Konstruktor ein IsolatedContext-Objekt, das Datei- und Datenbankvorgänge, aber baut andere Interaktionen mit dem Android-System aus. Die Datei- und Datenbankvorgänge selbst finden in einem Verzeichnis statt, das lokal auf dem Gerät oder Emulator und hat ein spezielles Präfix.

Der Konstruktor erstellt dann ein MockContentResolver, das als Resolver verwendet wird. für den Test.

Schließlich erstellt der Konstruktor eine Instanz des zu testenden Anbieters. Dies ist ein normales ContentProvider-Objekt, das aber seine gesamte Umgebung aus dem IsolatedContext stammen und daher auf die Arbeit in isolierten Testumgebung. Alle in der Testlaufklasse durchgeführten Tests werden ausgeführt. mit diesem isolierten Objekt vergleichen.

Integrationstests für Contentanbieter werden genauso durchgeführt wie instrumentierte Unittests.

Testelemente

Im Folgenden finden Sie einige spezifische Richtlinien für das Testen von Contentanbietern.

  • Mit Resolver-Methoden testen: Sie können auch einen Anbieter instanziieren. Objekt in ProviderTestCase2 sollten Sie immer mit einem Resolver-Objekt testen, den entsprechenden URI. Dadurch wird sichergestellt, dass Sie den Anbieter testen, und dieselbe Interaktion ausführen, die eine normale Anwendung nutzen würde.
  • Einen öffentlichen Dienstleister als Vertrag testen: Wenn Sie beabsichtigen, öffentlich und für andere Anwendungen verfügbar ist, sollten Sie es als Vertrag testen. Hier einige Beispiele: <ph type="x-smartling-placeholder">
      </ph>
    • Testen Sie mit Konstanten, die Ihr Anbieter öffentlich zugänglich macht. Sehen Sie sich zum Beispiel für Konstanten, die sich auf Spaltennamen in einer der Datentabellen des Anbieters beziehen. Dabei sollte es sich immer um Konstanten handeln, die öffentlich vom Anbieter definiert wurden.
    • Testen Sie alle URIs, die Ihr Anbieter anbietet. Ihr Anbieter bietet möglicherweise mehrere URIs, die sich jeweils auf einen anderen Aspekt der Daten beziehen.
    • Testen Sie ungültige URIs. Ihre Einheitentests sollten den Anbieter absichtlich mit einen ungültigen URI und suchen Sie nach Fehlern. Ein gutes Anbieterdesign besteht darin, IllegalArgumentException für ungültige URIs.
  • Standardinteraktionen mit Anbietern testen: Die meisten Anbieter bieten sechs Zugriffsmöglichkeiten an. Methoden: query(), insert(), delete(), update(), getType() und onCreate() Mit Ihren Tests sollten Sie überprüfen, ob alle diese Methoden funktionieren.
  • Geschäftslogik testen: Wenn der Contentanbieter Geschäftslogik implementiert, ich sollten Sie es testen. Die Geschäftslogik umfasst die Verarbeitung ungültiger Werte, arithmetische Berechnungen, Beseitigung oder Kombination von Duplikaten.