2016-06-09 5 views
18

Das ist das erste Mal, dass ich Einheit Testfälle in Android schreiben muss.Unit Test Cases mit JUnit + (Robolectric oder Mockito oder beide in Android)

Also ich habe viele Dinge gesucht.

  1. Robolectric framewordk - Läuft auf JVM
  2. Mockito Framwork - Mocking Objekte

So habe ich einige Zweifel in Robolectric & Mokito.

  1. Sollte ich Robolectric nur mit JUnit in Android App verwenden müssen?
  2. Sollte ich Mockito nur mit JUnit in Android App verwenden müssen?
  3. Muss ich mit beiden Rahmen gehen?
  4. Was ist der Unterschied zwischen Mockito & Robolectric?

Ich habe die Suche nach dem Unterschied zwischen Mokito & Robolectric, aber bekomme keine richtige Antwort dafür.

Bitte vorschlagen.

Antwort

26

Sie haben leicht unterschiedliche Verwendungen und ich neige dazu, beide in meinen Projekten zu verwenden.

Mockito

wird zur Herstellung von Mocks von Ihre Klassen verwendet.

Wenn Sie eine bestimmte Klasse testen, verspotten Sie alle Abhängigkeiten mit Mockito.

Wo möglich, sollten die meisten Ihrer Tests mockito verwenden. Um dies zu ermöglichen, teilen die meisten Leute ihren Code in MVP usw. auf, wobei die Geschäftslogik von der View-Logik getrennt ist. Auf diese Weise hat Ihre Geschäftslogik (Presenter) keine Kenntnisse (oder Abhängigkeiten) in der Android-Bibliothek und es ist nicht notwendig, diese zu mokieren.

Robolectric

ist eine Bibliothek, die viele Mocks von Android Klassen enthält.

Der Robolectric Test Runner injiziert diese "Schattenobjekte" anstelle der tatsächlichen Android-Klassen, wenn die Tests ausgeführt werden. Dadurch können die Tests auf der JVM ausgeführt werden, ohne dass eine Instanz von Android gestartet wird.

Wenn Sie MVP verwenden, wird Ihre View-Ebene in der Regel von der Aktivität/dem Fragment implementiert. Hier können Sie Robolectric verwenden, um diese nachzuahmen. nur

Hinweise

Verwenden Robolectric, wo nötig. Es implementiert im Grunde Teile des Android-Frameworks, aber nicht immer auf genau die gleiche Weise.

Möglicherweise benötigen Sie auch eine weitere Bibliothek wie PowerMock. Dies ermöglicht das Mocking von statischen Klassen wie Math oder kann verwendet werden, um statische Android-Klassen wie TextUtils vorzuspielen.

Beide werden mit JUnit verwendet

+0

Ich habe Activity & Fragment so für die ich robolectric & für meine Modellklassen verwenden werde, die mit Webservices verwandt ist, werde ich mockito verwenden. Recht? –

+0

Nun, es ist vielleicht nicht so klar, aber das ist die allgemeine Idee. – Jahnold

+0

Werfen Sie einen Blick auf die Tests für diese Beispiel-App, die Ihnen vielleicht ein paar Ideen geben könnten: https://github.com/emmaguy/rxjava-mvp-giphy – Jahnold

9

Mockito allein kann die meisten Fälle abdecken.

jedoch Robolectric können auch begrenzte Operationen auf Android-Komponente wie Aktivität oder Fragment in Einheit Test (nicht Instrumentierung Test, der keine Abhängigkeit von Android SDK hat) zur Verfügung stellen, die keinen Emulator oder Geräte benötigen und ist erheblich schneller als Instrumentierungstests.

Mein Vorschlag: Verwenden Sie Mockito für Komponententest und Espresso für UI-Test, da sie halb-offizielle Test-Frameworks für Android sind.

Fügen Sie Robolectric in Ihrem Komponententest hinzu, wenn es einige Abhängigkeiten von Android SDK gibt.

+0

Ich habe Aktivität und Fragmente und Web-Services. Ich muss nur Unit-Tests machen, die nicht instrumental sind. Also ich verstehe robolectric, aber ich weiß nicht allzu viel, dass, wo ich robolectric oder wo mockito verwenden werde. oder nur Mockito wird für Modellklassen verwendet? –

+0

Hinzufügen zu diesem und zu Ihrem Kommentar Wenn Ihr Business-Logik-Layer von Android Framework vollkommen unabhängig ist, sollten Sie JUnit mit Mockito verwenden. Nur wenn Ihr Business-Logik-Layer Android Framework-Abhängigkeiten hat, müssen Sie Roboelective verwenden. – Talha

Verwandte Themen