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:
- Erstellen Sie die Testklasse als abgeleitete Klasse von
ProviderTestCase2
. - Gib die
AndroidJUnitRunner
-Klasse an, die von AndroidX Test bereitgestellt wird als Standard-Test-Runner festlegen. - Legen Sie das Objekt
Context
aus der KlasseApplicationProvider
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()
undonCreate()
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.