Ich schreibe ein Android Library-Projekt, das auf der Android-Bitmap-Klasse (AndroindLib) basiert und nur die Utility-Klasse enthält (keine Aktivität). Ich habe versucht, es mit Android JUnit zu testen, aber es beschwert sich immer wieder, dass die AnroidLib.apk nicht gefunden werden kann
Was ist der richtige Weg, um Android Library Project zu testen?
Antworten:
Zitieren der Dokumentation :
"Es gibt zwei empfohlene Methoden zum Einrichten von Tests für Code und Ressourcen in einem Bibliotheksprojekt:
Sie können ein Testprojekt einrichten, das ein Anwendungsprojekt instrumentiert, das vom Bibliotheksprojekt abhängt. Anschließend können Sie dem Projekt Tests für bibliotheksspezifische Funktionen hinzufügen.
Sie können ein Standardanwendungsprojekt einrichten, das von der Bibliothek abhängt, und die Instrumentierung in dieses Projekt einfügen. Auf diese Weise können Sie ein eigenständiges Projekt erstellen, das sowohl die Tests / Instrumente als auch den zu testenden Code enthält. "
quelle
Ändern Sie in Ihrem Testprojekt einfach den Paketnamen so, dass er mit dem Paket Ihrer Bibliothek übereinstimmt. Zum Beispiel haben Sie eine Bibliothek, deren Paket ist
"com.example.lib"
. Erstellen Sie ein Testprojekt für Ihre Bibliothek. In der Manifestdatei sehen Siepackage="com.example.lib.test"
undtargetPackage="com.example.lib"
. Ändern Sie einfach das Paket von "com.example.lib.test" in "com.example.lib" (belassen Sie estargetPackage
wie es ist).Stellen Sie außerdem sicher, dass die Bibliothek NICHT im Java-Erstellungspfad, sondern als normale Android-Bibliothek auf Ihr Testprojekt verweist : In Eclipse muss sie als Bibliothek auf der
Project->Properties->Android
Registerkarte, jedoch nicht auf derProject->Properties->Java Build Path
Registerkarte angezeigt werden .Führen Sie dann Ihre Tests durch.
quelle
http://www.paulbutcher.com/2010/09/android-library-project-with-tests-step-by-step/ beschreibt den Prozess, der zur Implementierung des zweiten Vorschlags in der Antwort von CommonsWare erforderlich ist
quelle
Gemäß der Dokumentation :
Das Testen eines Bibliotheksmoduls entspricht dem Testen einer App. Der Hauptunterschied besteht darin, dass die Bibliothek und ihre Abhängigkeiten automatisch als Abhängigkeiten der Test-APK aufgenommen werden. Dies bedeutet, dass die Test-APK nicht nur ihren eigenen Code enthält, sondern auch den AAR der Bibliothek und alle ihre Abhängigkeiten. Da es keine separate "App im Test" gibt, installiert (und deinstalliert) die androidTest-Task nur die Test-APK. Beim Zusammenführen mehrerer Manifestdateien folgt Gradle der Standardprioritätsreihenfolge und führt das Manifest der Bibliothek in das Hauptmanifest der Test-APK ein.
quelle
HINWEIS: Diese Lösung basiert auf der Verwendung von Eclipse Indigo (3.8.2) und muss möglicherweise für eine andere IDE etwas anders implementiert werden, obwohl die Grundprinzipien dieselben sind.
Ich hatte ähnliche Probleme und stellte fest, dass Folgendes immer funktioniert:
( HINWEIS: Diese Anweisungen dienen zum Erstellen einer neuen Projektgruppe von Grund auf neu. Wenn Sie bereits Teile der Projektgruppe erstellt haben, müssen Sie Ihre Projekte möglicherweise so ändern, dass sie auf dieselbe Weise verbunden werden. )
Sie sollten am Ende drei Projekte haben (Android Library, Android Test App, Android Library Tester), die ungefähr so aussehen:
Am Ende sollten Sie eine Klasse zum Testen Ihrer Android-Bibliothek haben, die ungefähr so aussieht:
Sie können dann einen beliebigen Test hinzufügen. Sie müssen die Android-Test-App (in diesem Beispiel "RemingtonAndroidToolsTestApp") nicht weiter referenzieren, um Ihre Tests auszuführen, es sei denn, sie erfordern Zugriff auf eine Android-spezifische Komponente (wie z. B. den Ordner "Assets"). Wenn Sie auf Android-spezifische Komponenten zugreifen müssen, können Sie dies tun, indem Sie die Android-Test-App (in diesem Beispiel "RemingtonAndroidToolsTestApp") ändern und dann über die von der Standard-Android-Junit-API bereitgestellte Instrumentierung darauf verweisen. (Mehr dazu lesen Sie hier: http://developer.android.com/tools/testing/testing_android.html )
quelle
Wenn Ihre Ulitiy-Klassen nicht von einem Android-spezifischen Code abhängen, können Sie einfach Standard-JUnit-Unit-Tests verwenden. Die Android-Versionen müssen nicht verwendet werden.
quelle