web-dev-qa-db-fra.com

Comment tester un projet de bibliothèque Android

J'écris un Android Library Project basé sur Android classe Bitmap (appelez-le AndroindLib) qui ne contient que la classe utilitaire (pas d'activité). J'ai essayé de le tester) en utilisant Android JUnit, mais il continue de se plaindre qui ne trouve pas le AnroidLib.apk

Quelle est la bonne façon de faire un test unitaire Android Library Project?

91
Lily

Citant la documentation :

"Il existe deux méthodes recommandées pour configurer les tests sur le code et les ressources dans un projet de bibliothèque:

  • Vous pouvez configurer un projet de test qui instrumente un projet d'application qui dépend du projet de bibliothèque. Vous pouvez ensuite ajouter des tests au projet pour les fonctionnalités spécifiques à la bibliothèque.

  • Vous pouvez configurer un projet d'application standard qui dépend de la bibliothèque et placer l'instrumentation dans ce projet. Cela vous permet de créer un projet autonome qui contient à la fois les tests/instrumentations et le code à tester. "

70
CommonsWare

Dans votre projet de test, changez simplement le nom du package pour qu'il soit identique au package de votre bibliothèque. Par exemple, vous avez une bibliothèque dont le package est "com.example.lib". Créez un projet de test ciblant votre bibliothèque. Dans le fichier manifeste, vous verrez package="com.example.lib.test", et targetPackage="com.example.lib". Changez simplement le paquet de "com.example.lib.test" en "com.example.lib" (targetPackage laissez tel quel).

Assurez-vous également que la bibliothèque est référencée dans votre projet de test ET NON dans Java chemin de génération, mais comme d'habitude = Android bibliothèque: dans Eclipse, il doit être affiché comme bibliothèque dans Project->Properties->Android tab, mais pas dans Project->Properties->Java Build Path tab.

Ensuite, exécutez vos tests.

17
alexaschka

http://www.paulbutcher.com/2010/09/Android-library-project-with-tests-step-by-step/ aide à décrire le processus nécessaire pour implémenter la deuxième suggestion dans la réponse de CommonsWare

13
yuzisee

Par documentation :

Tester un module de bibliothèque équivaut à tester une application. La principale différence est que la bibliothèque et ses dépendances sont automatiquement incluses en tant que dépendances de l'APK de test. Cela signifie que l'APK de test comprend non seulement son propre code, mais également l'AAR de la bibliothèque et toutes ses dépendances. Comme il n'y a pas d '"application en cours de test" distincte, la tâche androidTest installe (et désinstalle) uniquement l'APK de test. Lors de la fusion de plusieurs fichiers manifestes, Gradle suit l'ordre de priorité par défaut et fusionne le manifeste de la bibliothèque dans le manifeste principal de l'APK de test.

3
Avilio

REMARQUE: Cette solution est basée sur l'utilisation d'Eclipse Indigo (3.8.2) et pourrait devoir être implémentée légèrement différemment pour un autre IDE bien que le les principes de base seront les mêmes.

J'ai eu des problèmes similaires et j'ai constaté que les opérations suivantes fonctionnent toujours:

( REMARQUE: ces instructions permettent de créer un nouveau groupe de projets à partir de zéro. Si vous avez déjà créé des parties du groupe de projets, vous devrez peut-être modifier vos projets afin qu'ils connectez-vous de la même manière.)

  1. Créez un nouveau projet de bibliothèque Android en cochant la case "Is Library" lors de la création. (par exemple, un projet Android nommé "RemingtonAndroidTools").
  2. Générez le projet de bibliothèque Android et vérifiez qu'il a créé un fichier jar dans le dossier bin. (par exemple, un fichier jar nommé "RemingtonAndroidTools.jar".)
  3. Créez un projet Android vide pour tester l'application Android qui servira d'application de test Android. (Par exemple, un projet Android nommé "RemingtonAndroidToolsTestApp"). Vous n'aurez pas besoin de modifier le code source ou les ressources du projet Android Test App sauf si vous avez quelque chose à ajouter pour le test. Beaucoup de choses peuvent être testées sans aucune modification du projet d'application de test Android. Le projet Android Test App est un pont entre votre projet de bibliothèque Android et le projet Junit Android qui permet de tester le projet de bibliothèque Android via Android Junit possible.
  4. Accédez à l'onglet Bibliothèque de Java Chemin de génération pour le projet Android Test App ("RemingtonAndroidToolsTestApp" dans cet exemple).
  5. Ajoutez le fichier jar ("RemingtonAndroidTools.jar" dans cet exemple) du projet de bibliothèque Android ("RemingtonAndroidTools" dans cet exemple) via le bouton "Ajouter des pots ...".
  6. Créez un nouveau projet de test Android (par exemple "RemingtonAndroidToolsTester") qui servira de testeur de bibliothèque Android et sélectionnez le projet d'application de test Android ("RemingtonAndroidToolsTestApp" dans cet exemple) comme cible.
  7. Accédez à l'onglet Bibliothèque de Java Chemin de génération pour le projet Android Library Tester ("RemingtonAndroidToolsTester" dans cet exemple).
  8. Ajoutez le fichier jar ("RemingtonAndroidTools.jar" dans cet exemple) du projet de bibliothèque Android ("RemingtonAndroidTools" dans cet exemple) via le bouton "Ajouter des pots ...".
  9. Recherchez le dernier dossier de votre package Android dans le projet Android Library Tester ("danny.remington.remington_Android_tools_test_app.test" par exemple) et ajoutez une classe de test ("MainActivityTest" par exemple) qui hérite de ActivityInstrumentationTestCase2.
  10. Modifiez la classe de test ("TestActivityTest" dans cet exemple) pour utiliser l'activité (par exemple "TestActivity") de l'application de test Android ("RemingtonAndroidToolsTestApp" dans cet exemple) comme paramètre pour ActivityInstrumentationTestCase2.
  11. Modifiez la classe de test ("TestActivityTest" dans cet exemple) et créez un constructeur par défaut qui appelle Super (Class) et transmet la classe de l'application de test Android ("TestActivity.class" par exemple).

Vous devriez vous retrouver avec trois projets (Android Library, Android Test App, Android Library Tester) qui ressemblent à ceci:

enter image description here

enter image description here

enter image description here

Vous devriez vous retrouver avec une classe pour tester votre bibliothèque Android qui ressemble à ceci:

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);
   }

}

Vous pouvez ensuite ajouter le test de votre choix. Vous n'aurez pas besoin de référencer l'application de test Android ("RemingtonAndroidToolsTestApp" dans cet exemple) pour exécuter vos tests à moins qu'ils ne nécessitent l'accès à un composant spécifique Android (comme le dossier Assets, par exemple). Si vous devez accéder à des composants spécifiques de Android, vous pouvez le faire en modifiant l'application de test Android ("RemingtonAndroidToolsTestApp" dans cet exemple), puis en la référençant via l'instrumentation fournie par la norme Android API Junit. (Vous pouvez en savoir plus à ce sujet ici: http://developer.Android.com/tools/testing/testing_Android.html )

1

Si vos classes utilitaires ne dépendent d'aucun code spécifique Android Android, vous pouvez simplement utiliser des tests unitaires JUnit standard. Pas besoin d'utiliser les versions Android Android.

0
Cheryl Simon