99 votes

Comment tester un projet de bibliothèque Android

J'écris un projet de bibliothèque Android basé sur la classe Android Bitmap (je l'appelle AndroindLib) qui ne contient que des classes utilitaires (pas d'activité). J'ai essayé de le tester en utilisant Android JUnit, mais il continue à se plaindre qu'il ne peut pas trouver le fichier AnroidLib.apk.

Quelle est la bonne façon de tester un projet de bibliothèque Android ?

1 votes

Ou ( alerte à la publicité éhontée ), vous pouvez utiliser un projet que j'ai créé : Android Library Test Harness (ce que j'aime appeler "Alt H"). Il est disponible en tant que git repo : gitorious.org/alth Le projet est toujours en cours de développement et la documentation est un peu éparse. N'hésitez pas à me contacter si vous avez des questions.

78voto

CommonsWare Points 402670

Citation : la documentation :

"Il existe deux façons recommandées de mettre en place des 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."

0 votes

Archive de l'article de blog : Android-library-project-with-tests-step-by-step permet de décrire le processus nécessaire pour mettre en œuvre la deuxième suggestion de la réponse de CommonsWare

27 votes

Donc, en gros, tout ce que vous avez à faire est d'ajouter la bibliothèque à votre projet de test et de tester le projet de test.

0 votes

Le lien n'est plus valide. Pourriez-vous nous indiquer le lien actuel ?

17voto

alexaschka Points 170

Dans votre projet de test, changez simplement le nom du paquet pour qu'il soit le même que celui 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" y targetPackage="com.example.lib" . Il suffit de changer le paquet de "com.example.lib.test" en "com.example.lib" ( targetPackage laisser en l'état).

Assurez-vous également que la bibliothèque est référencée dans votre projet de test. PAS dans le chemin de construction de Java, mais comme une bibliothèque Android habituelle : dans Eclipse, elle doit être affichée comme une bibliothèque dans le chemin de construction de Java. Project->Properties->Android onglet, mais pas en Project->Properties->Java Build Path onglet.

Ensuite, faites vos tests.

0 votes

Vos idées m'ont semblé logiques, de sorte que le test se cible lui-même (comme l'application) et que l'application est liée à la bibliothèque....mais je n'ai pas réussi à le faire fonctionner via ant build ou IntelliJ.... car le .apk (attendu pour l'application testée) n'existe pas lorsqu'on essaie de l'installer, car il est compilé dans "test/bin/.-debug.apk".

0 votes

J'ai réussi à le faire fonctionner en changeant le nom du paquet du projet de test dans son manifeste (et le paquet en cours de test - qui devrait être le même) pour qu'il ne coïncide PAS avec le nom du paquet du projet de bibliothèque, et en supprimant la référence au projet de test cible dans le fichier ant.properties.

1 votes

Je pense que c'est une meilleure réponse que celle qui a été acceptée, qui ne fait que reprendre la documentation - IMHO.

13voto

yuzisee Points 179

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

1voto

NOTE : Cette solution est basée sur l'utilisation d'Eclipse Indigo (3.8.2) et peut être mise en œuvre de manière légèrement différente pour un autre IDE, bien que les principes de base soient les mêmes.

J'ai eu des problèmes similaires et j'ai trouvé que faire ce qui suit fonctionne toujours :

( REMARQUE : Ces instructions concernent la création d'un nouveau groupe de projet à partir de zéro. Si vous avez déjà construit des parties du groupe de projets, vous devrez peut-être modifier vos projets pour qu'ils se connectent de la même manière. )

  1. Créez un nouveau projet Android Library en cochant la case "Is Library" lors de la création. (par exemple un projet Android nommé "RemingtonAndroidTools").
  2. Construisez le projet Android Library 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 Android Test App. Le projet Android Test App est un pont entre votre projet Android Library et le projet Android Junit qui permet de tester le projet Android Library via Android Junit.
  4. Allez dans l'onglet Library de Java Build Path 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 "Add Jars...".
  6. Créez un nouveau projet Android Test (par exemple "RemingtonAndroidToolsTester") qui servira de testeur de bibliothèque Android et sélectionnez le projet Android Test App ("RemingtonAndroidToolsTestApp" dans cet exemple) comme cible.
  7. Allez dans l'onglet Library de Java Build Path 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 "Add Jars...".
  9. Trouvez 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 fait un appel à super(Class) et passe 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 tous les tests que vous souhaitez. Vous n'aurez pas besoin de faire référence à l'application de test Android ("RemingtonAndroidToolsTestApp" dans cet exemple) pour exécuter vos tests, sauf s'ils 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 à 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 l'API Junit Android standard. (Vous pouvez en savoir plus à ce sujet ici : http://developer.Android.com/tools/testing/testing_android.html )

0voto

Cheryl Simon Points 25259

Si vos classes ulitiy ne dépendent d'aucun code spécifique à Android, vous pouvez simplement utiliser les tests unitaires standard de JUnit. Il n'est pas nécessaire d'utiliser les versions Android.

2 votes

Cela ne fonctionne pas car JUnit standard est compilé sur la JVM standard alors que les fichiers java d'Android sont compilés sur la VM Dalvik.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X