2016-07-25 16 views
1

Ich versuche Komponententests für unsere App zu schreiben, und ich bin ein wenig verwirrt über das Testen unserer DAO-Ebene. Diese Ebene verwendet viele Methoden der realen SQLiteDatabase und wir denken nicht, dass die Verwendung von Mockito in diesem Fall ist ein richtiger Weg. Also ist unsere Frage - wie man DAO Schicht mit echter Datenbank prüft? Ist es in Android wirklich möglich, eine echte Instanz der Datenbank in Komponententests zu erhalten?Testen von Android-Apps - So testen Sie den DAO-Layer mit einer echten Datenbank?

Was wollen wir Test:

  1. Ausführung von SQL-Anweisungen, zum Beispiel database.execSQL(..) Methoden.
  2. Ausführung von insert, update, delete, rawQuery Methoden von SQLiteDatabase Klasse.

Vielen Dank im Voraus!

Antwort

1

Entschuldigung, Sie können keine Unittests mit einer echten Datenbank schreiben. Dies sind per Definition keine Unittests.

Manchmal kann es jedoch wertvoll sein, gefälschte Implementierungen, z.B. in Ihrem Fall eine InMemoryDatabase. Dies hilft, Ihren Code von DB ein wenig zu entkoppeln, weil Sie eine abstrakte Schnittstelle und einige Möglichkeiten definieren müssen, von realDB zu fakeDB zu wechseln. Wenn Sie nur eine kleine Anzahl von DB-Methoden verwenden, kann es die Mühe wert sein und die Mock-Lösung in Ihren Unittests übertreffen.

Auf lange Sicht ist jedoch der bessere Weg, um Ihr Design zu verbessern. Bitte lesen Sie "Dependency Inversion Principle" und "Onion Architecture".

+0

Es ist eine andere Art von "heiligen Krieg" -Frage. Ich stimme Ihnen zu, nicht Einheitentest mit echten db zu schreiben. Allerdings gibt es im Web viele Artikel, die damit kontrovers diskutiert werden. Für OP empfehle ich Schreibintegrationstests. –

+0

@EvgeniyK., Danke für Ausdruck über Integrationstests. Ich denke, wir werden sie schreiben. –