Wie testet man die Klasse mit Content Resolver / Provider?

8

Ich versuche eine Klasse zu testen, die den Content-Resolver abfragt.

Ich möchte MockContentResolver und mock query method verwenden.

Das Problem ist, dass diese Methode endgültig ist. Was soll ich machen? Verwenden Sie spöttisches Framework? Mock andere Klasse? Vielen Dank im Voraus.

%Vor%     
pixel 07.07.2011, 12:17
quelle

5 Antworten

3

Diese Frage ist ziemlich alt, aber die Leute könnten immer noch das Problem haben wie ich, weil es nicht viel Dokumentation zum Testen gibt.

Für mich zum Testen der Klasse, die vom Content Provider abhängig war (von der Android API), habe ich ProviderTestCase2

verwendet %Vor%

Es wurde geschrieben mit Jenn Weingartens Antwort. Einige Dinge zu beachten: -Ihr MockContentProvider muss öffentlich sein - Sie müssen Context von der Methode this.getMockContext() anstelle von this.getContext() in Ihrer getesteten Klasse verwenden, sonst werden Sie auf keine falschen Daten zugreifen, sondern auf reale Daten vom Gerät (in diesem Fall - Kontakte) -Test darf nicht mit AndroidJUnit4 Runner ausgeführt werden -Test muss natürlich als Android instrumentierter Test ausgeführt werden - Der zweite Parameter im Konstruktor des Tests (Autorität) muss derselbe sein wie der URI, der in der getesteten Klasse abgefragt wird -Type von Mock-Provider muss als Klassenparameter bereitgestellt werden

Im Grunde macht es ProviderTestCase2 möglich, dass Sie Mock-Context, Mock-Content-Resolver und Mock-Content-Provider initialisieren.

Ich fand es viel einfacher, ältere Testmethoden zu verwenden, anstatt zu versuchen, einen lokalen Unit-Test mit mockito und junit4 für die Klasse zu schreiben, die stark von android API abhängt.

    
Kamil Orzechowski 28.02.2016, 09:06
quelle
15

Hier ist ein Beispieltest, der Scheindaten von einem Inhaltsanbieter mit getContentResolver (). query zurückgibt.

Es sollte mit einigen Änderungen für jeden Inhaltsanbieter funktionieren, aber in diesem Beispiel wird das Zurückgeben von Telefonnummern aus dem Inhaltsanbieter für Kontakte provoziert

Hier sind die allgemeinen Schritte:

  1. Erstellt den entsprechenden Cursor mit MatrixCursor
  2. Erweitern Sie MockContentProvider, um den erstellten Cursor
  3. zurückzugeben
  4. Fügen Sie den Anbieter mithilfe von addProvider und setContentResolver
  5. zu einem MockContentResolver hinzu
  6. Fügen Sie den MockContentResolver zu einem erweiterten MockContext
  7. hinzu
  8. Übergibt den Kontext an die zu testende Klasse

Da die Abfrage eine abschließende Methode ist, müssen Sie nicht nur MockContentProvider, sondern auch MockContentResolver vortäuschen. Andernfalls erhalten Sie einen Fehler, wenn acquireprovider während der Abfragemethode aufgerufen wird.

Hier ist der Beispielcode:

%Vor%

Wenn Sie den Kontext nicht weitergeben möchten:

Wenn Sie möchten, dass es von getContext () in der getesteten Klasse zurückgegeben wird, anstatt es zu übergeben, sollten Sie in der Lage sein, getContext () in Ihrem Android-Test wie folgt zu überschreiben

%Vor%     
Jenn Weingarten 24.01.2014 23:44
quelle
2

Nachdem ich Dokumente gelesen hatte, konnte ich MockContentProvider schreiben, was die Rückkehr der entsprechenden Cursor einführte. Dann habe ich diesen Anbieter mit MockContentResolver zu addProvider hinzugefügt.

    
pixel 10.07.2011 17:29
quelle
1

Haben Sie gelesen: Testen von Content Providern ?

Siehe auch diesen Beispielcode .

    
Vincent Mimoun-Prat 07.07.2011 12:26
quelle
0

Ich habe Mockito noch nicht benutzt, aber für Content Provider können Sie sich auf Robolectric verlassen. Ссылка

    
Juan Mendez 09.04.2016 05:16
quelle