webentwicklung-frage-antwort-db.com.de

So testen Sie ein Android Library Project

Ich schreibe ein Android= Bibliotheksprojekt basierend auf Android= Bitmap-Klasse (nenne es AndroindLib)), das nur die Utility-Klasse enthält (keine Aktivität). Ich habe versucht, es zu testen mit Android JUnit, aber es beschwert sich immer wieder, dass die AnroidLib.apk nicht gefunden werden kann

Was ist der richtige Weg zum Unit-Test Android Library Project?

91
Lily

Zitat die Dokumentation :

"Es gibt zwei empfohlene Möglichkeiten, das Testen von Code und Ressourcen in einem Bibliotheksprojekt einzurichten:

  • 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/Instrumentierungen als auch den zu testenden Code enthält. "

70
CommonsWare

Ändern Sie in Ihrem Testprojekt einfach den Paketnamen so, dass er mit dem Paket Ihrer Bibliothek übereinstimmt. Zum Beispiel haben Sie eine Bibliothek mit dem Paket "com.example.lib". Erstellen Sie ein Testprojekt für Ihre Bibliothek. In der Manifestdatei sehen Sie package="com.example.lib.test" Und targetPackage="com.example.lib". Ändern Sie einfach das Paket von "com.example.lib.test" in "com.example.lib" (targetPackage belassen Sie es wie es ist).

Stellen Sie außerdem sicher, dass die Bibliothek auf Ihr Testprojekt verweist NICHT in Java Build-Pfad, sondern wie gewohnt = Android Bibliothek: In Eclipse muss sie als Bibliothek auf der Registerkarte Project->Properties->Android Angezeigt werden, aber nicht auf der Registerkarte Project->Properties->Java Build Path.

Dann führen Sie Tests durch.

17
alexaschka

http://www.paulbutcher.com/2010/09/Android-library-project-with-tests-step-by-step/ beschreibt den Prozess, der zur Implementierung des zweiten Vorschlags in die Antwort von CommonsWare erforderlich ist

13
yuzisee

Nach dem 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 enthalten sind. Dies bedeutet, dass das Test-APK nicht nur seinen eigenen Code enthält, sondern auch den AAR der Bibliothek und alle seine 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 mit dem Hauptmanifest des Test-APK zusammen.

3
Avilio

ANMERKUNG: Diese Lösung basiert auf der Verwendung von Eclipse Indigo (3.8.2) und muss möglicherweise für ein anderes IDE etwas anders implementiert werden, obwohl dies die Grundprinzipien sind das Gleiche.

Ich hatte ähnliche Probleme und stellte fest, dass Folgendes immer funktioniert:

(HINWEIS: Diese Anweisungen dienen zum Erstellen einer neuen Projektgruppe von Grund auf. Wenn Sie bereits Teile der Projektgruppe erstellt haben, müssen Sie Ihre Projekte möglicherweise so ändern, dass sie eine Verbindung herstellen auf die gleiche Weise.)

  1. Erstellen Sie ein neues Android Bibliotheksprojekt, indem Sie während der Erstellung das Kontrollkästchen "Ist Bibliothek" aktivieren. (Zum Beispiel ein Android Projekt mit dem Namen "RemingtonAndroidTools").
  2. Erstellen Sie das Bibliotheksprojekt Android und stellen Sie sicher, dass eine JAR-Datei im Ordner bin erstellt wurde. (Zum Beispiel eine JAR-Datei mit dem Namen "RemingtonAndroidTools.jar".)
  3. Erstellen Sie ein leeres Android Projekt zum Testen der Android App, das als Android Test-App dient. (Zum Beispiel ein Android Projekt mit dem Namen "RemingtonAndroidToolsTestApp"). Sie müssen den Quellcode oder die Ressourcen des Android Test-App-Projekts nur ändern, wenn Sie über etwas verfügen, das zum Testen hinzugefügt werden muss. Viele Dinge können ohne Änderungen am Android Test App Project getestet werden. Das Android Test-App-Projekt ist eine Brücke zwischen Ihrem Android Bibliotheksprojekt und dem Android Junit-Projekt, das das Testen des Android Bibliotheksprojekt über Android Junit möglich.
  4. Wechseln Sie zur Registerkarte Bibliothek von Java Build Path für das Android Test App-Projekt (in diesem Beispiel "RemingtonAndroidToolsTestApp").
  5. Fügen Sie die JAR-Datei (in diesem Beispiel "RemingtonAndroidTools.jar") des Bibliotheksprojekts Android (in diesem Beispiel "RemingtonAndroidTools") über die Schaltfläche "JAR hinzufügen ..." hinzu.
  6. Erstellen Sie ein neues Android Testprojekt (zum Beispiel "RemingtonAndroidToolsTester"), das als Android Bibliothekstester dient, und wählen Sie das Android Test-App-Projekt ("RemingtonAndroidToolsTestApp") aus. in diesem Beispiel) als Ziel.
  7. Wechseln Sie zur Registerkarte Bibliothek von Java Build Path für das Android Library Tester-Projekt (in diesem Beispiel "RemingtonAndroidToolsTester").
  8. Fügen Sie die JAR-Datei (in diesem Beispiel "RemingtonAndroidTools.jar") des Bibliotheksprojekts Android (in diesem Beispiel "RemingtonAndroidTools") über die Schaltfläche "JAR hinzufügen ..." hinzu.
  9. Suchen Sie den letzten Ordner Ihres Android Pakets im Android Library Tester-Projekt (z. B. "danny.remington.remington_Android_tools_test_app.test") und fügen Sie eine Testklasse hinzu (z. B. "MainActivityTest") ), das von ActivityInstrumentationTestCase2 erbt.
  10. Bearbeiten Sie die Testklasse ("TestActivityTest" in diesem Beispiel), um die Aktivität (zum Beispiel "TestActivity") der Android Test-App ("RemingtonAndroidToolsTestApp" in diesem Beispiel) als Parameter für ActivityInstrumentationTestCase2 zu verwenden.
  11. Bearbeiten Sie die Testklasse (in diesem Beispiel "TestActivityTest") und erstellen Sie einen Standardkonstruktor, der super (Class) aufruft und die Klasse der Android Test-App (zum Beispiel "TestActivity.class") übergibt ).

Sie sollten am Ende drei Projekte haben (Android Library, Android Test App, Android Library Tester), die ungefähr so ​​aussehen:

enter image description here

enter image description here

enter image description here

Am Ende sollten Sie eine Klasse zum Testen Ihrer Android Bibliothek haben, die ungefähr so ​​aussieht:

package danny.remington.remington_Android_tools_test_app.test;

import Android.test.ActivityInstrumentationTestCase2;
import danny.remington.remington_Android_tools_test_app.TestActivity;

/**
 * 
 */
public class TestActivityTest extends
      ActivityInstrumentationTestCase2<TestActivity> {

   public TestActivityTest() {
      super(TestActivity.class);
   }

}

Sie können dann einen beliebigen Test hinzufügen. Sie müssen nicht auf die Android Test-App (in diesem Beispiel "RemingtonAndroidToolsTestApp") verweisen, um Ihre Tests auszuführen, es sei denn, Sie benötigen Zugriff auf eine Android spezifische Komponente (wie den Ordner "Assets"). beispielsweise). Wenn Sie auf bestimmte Android Komponenten zugreifen müssen, können Sie dies tun, indem Sie die Android Test-App (in diesem Beispiel "RemingtonAndroidToolsTestApp") ändern und sie dann über die vom Standard bereitgestellte Instrumentierung referenzieren Android Junit-API. (Mehr dazu erfahren Sie hier: http://developer.Android.com/tools/testing/testing_Android.html )

Wenn Ihre Dienstprogrammklassen von keinem Android spezifischen Code abhängen, können Sie einfach Standard-JUnit-Komponententests verwenden. Sie müssen nicht die Android Versionen verwenden.

0
Cheryl Simon