6
votes

FRAGMENTActivity Test Junit

moi utilisé fragment code> du package de compatibilité Android, à l'aide du android-support-v4.jar code>. Mais je ne peux pas faire le test Junit à ce sujet.

My principale La fragmentactivité code> est déclarée comme suit p> xxx pré>

puis dans mon projet de test p> xxx pré>

mais quand je cours comme Android Junit Test CODE> PRODUCY FAILEDTOCREATESTS [RUNNER: JUNIT3] CODE>
TRACE DE ÉCHEC DE L'ÉCHEQUE FORT> P>

java.lang.RuntimeException: Exception during suite construction
at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:239)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
Caused by: java.lang.reflect.InvocationTargetException
at com.android.myproject.test.MyActivityClassTest.<init>(MyActivityClassTest.java:28)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
at android.test.suitebuilder.TestMethod.instantiateTest(TestMethod.java:87)
at android.test.suitebuilder.TestMethod.createTest(TestMethod.java:73)
at android.test.suitebuilder.TestSuiteBuilder.addTest(TestSuiteBuilder.java:263)
at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:185)
at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:336)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3982)
at android.app.ActivityThread.access$2900(ActivityThread.java:119)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1901)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoClassDefFoundError: com.android.myproject.MyActivityClass
... 19 more


0 commentaires

6 Réponses :


0
votes

Je suppose que ActivityStrumentationTestCase2 n'est pas compatible avec fragments . Vous devriez essayer quelque chose comme Robolectric .


1 commentaires

Non c'est compatible. Quand j'ai créé mes tests dans le même projet, cela a fonctionné. Merci Marcarse pour ce lien. :)



7
votes

7 commentaires

Merci Dtmilano, ce lien que vous avez fourni est vraiment utile, mais j'ai ajouté que la voie de construction des bibliothèques externes. Toujours malchance pour moi. Quand j'ai créé mes tests dans le même projet, cela fonctionnait :)


Ce que vous avez publié est une solution de contournement qui vous mènera à un autre problème: comment ne pas expédier les tests avec votre application.


Utilisez-vous Eclipse? Je suis sûr que ça marche parce que je l'utilise.


Oui, moi en utilisant Eclipse :( et si j'utilise le même projet que le test, cela me posera problème pour moi plus tard? :( Je pense que après avoir terminé mon projet, je supprimerai ce forfait de test supplémentaire et des entrées manifestes pour tester. Est-ce que ça va bien?


Suivez dtmilano.blogspot.com/2009/12/... - A> Je me suis toujours rempli de compilation lors de l'exécution de Build Ant Build Ant Debug dans le projet de test. Tels que: package android.support.v4.app n'existe pas [Javac] importer Android.Support.v4.app.fraGmagneCittivité;


Ensuite, j'ajoute un lien de l'Android.Support.v4 dans le projet principal de mon projet de test, la construction est passée, mais lors de l'exécution du test avec "test de débogage de fourmis", toujours satisfaite par: java.lang.noclassdefferror: com.mobile. client.activity.QuesttionListActivity


Mais il y a un problème de fragments de soutien. fragment.geview () retourne null. Mais avec android.app.fragments ça marche bien. J'utilise (extension) ActivityUnitterCase. Une idée?



7
votes

J'ai trouvé une solution

Le problème était xxx

Il ne peut pas trouver le chemin de classe même si je renvoie le même pot dans les deux projets (j'ai également essayé en utilisant Jar séparé pour le projet)

Maintenant, j'ai créé mon environnement de test dans le même projet , alors il fonctionnait

dans mon androidmanifest. xml xxx

puis j'ai ajouté ma classe de test dans mon package spécial pour tester xxx

tout est maintenant Travailler bien :)


1 commentaires

Cela fonctionne avec succès, mais je voudrais toujours savoir pourquoi cela se produit lors de l'utilisation d'un projet de test séparé ...



1
votes

Voir cette question pour une meilleure réponse:

La fragmentationActivité ne peut pas être testée via ActivityStrumentationTestCase2

Vous devez exporter la référence à la bibliothèque de compatibilité depuis votre application.


0 commentaires

1
votes

Ceci est en retard, mais je résous le même problème par seulement Ajout de la Android-support-support-v4.jar Dépendance au projet principal et le supprimant de l'essai projet.

Ensuite, assurez-vous que le projet principal est sur le chemin de construction du projet de test. Faites de même pour toute autre bibliothèques que les projets principaux et de test peuvent partager.


0 commentaires

0
votes

J'ai essayé presque une journée à faire face à ce problème et j'ai trouvé une solution d'un autre POST

Fondamentalement, votre support d'Android-support-v4.jar (dans mon cas) est utilisé dans l'application doit être identique à ce que vous avez utilisé dans votre demande de test. La meilleure façon de faire est de supprimer le même pot du répertoire de la Libs de votre projet de test et d'exporter la même chose de votre projet d'application. De cette façon, vous pouvez vous débarrasser de cette question à coup sûr.


0 commentaires