Unit-Tests isolieren die zu testende Komponente, und dies ist der Grund, warum sie häufig zusammen mit Mocks-Frameworks als Mockito verwendet werden: weil sie die Unit von ihren Abhängigkeiten isolieren. Bitte beachten Sie, dass Ihre Aussagen zur Android-API teilweise zutreffen, da es auch Instrumented Unit-Tests gibt , nämlich Instrumentation ist ebenfalls Teil des Junit-Pakets und auch die Klassen, die TestCase als Klasse AndroidTestCase erweiternist Teil des Junit-Pakets, ermöglicht jedoch die Verwendung von A) Context, den Sie mit getContext () aufrufen können, und B) Resources, die Teil der Android-API sind! Beachten Sie auch, dass AndroidTestCase eine Basisklasse ist und es mehrere andere nützliche Klassen gibt, die diese Klasse erweitern. Sie testen speziell Loader, ContentProvider und sogar Services und haben Zugriff auf die Android-API. Daher bieten diese Klassen ein JUnit-Testframework sowie Android-spezifische Methoden. Mit Junit4 gibt es jetzt die ServiceTestRule, die sich direkt von Object aus erstreckt und es Ihnen ermöglicht, einen Service einfacher zu testen, obwohl Sie eine Absicht nicht direkt in dieser Klasse starten können.
Instrumentationstests gehören ebenfalls zum Junit-Paket, aber die Kontrolle über die Android-API ist ziemlich vollständig, da Instrumentationstests im System instanziiert werden, bevor ein Anwendungscode ausgeführt wird. Zum Testen müssen Sie die reale Anwendung (Emulator oder Telefon) öffnen mit USB verbunden). Sie greifen auf Android-Komponenten (z. B. Klicken auf eine Schaltfläche) und den Anwendungslebenszyklus zu. Sie sind normalerweise langsamer als Junit-Tests, die TestCase erweitern (die oben untersuchten). Die typische Verwendung erfolgt mit ActivityInstrumentationTestCase2, das einen funktionalen Testansatz hat und benutzerorientierter ist.
BEARBEITEN: In Bezug auf Roboelectric und Mockito, die derzeit (13. Juli 2016) mit Espresso zwischen den derzeit beliebtesten Test-Frameworks zusammenarbeiten, können Sie mit Roboelectric mehrere Tests in Sekunden statt in Minuten ausführen. Dies ist sehr praktisch in Teams, die dies müssen Führen Sie kontinuierliche Tests durch und unterliegen Sie einer kontinuierlichen Integration.
Von der Website von Robolectric:
Ein alternativer Ansatz für Robolectric besteht darin, Mock-Frameworks wie Mockito zu verwenden oder das Android SDK zu verspotten. Dies ist zwar ein gültiger Ansatz, führt jedoch häufig zu Tests, bei denen es sich im Wesentlichen um umgekehrte Implementierungen des Anwendungscodes handelt. Roboelectric ermöglicht einen Teststil, der dem Black-Box-Testen näher kommt, wodurch die Tests für das Refactoring effektiver werden und sich die Tests auf das Verhalten der Anwendung konzentrieren können, anstatt auf die Implementierung von Android. Sie können weiterhin ein Spott-Framework zusammen mit Robolectric verwenden, wenn Sie möchten.
Mockito, das auch mit Junit verwendet werden kann, wird wirklich verwendet, mit Ausnahme der Fälle, in denen endgültige Klassen, anonyme Klassen oder primitive Typen verwaltet werden müssen.