Robolectric + Eclipse Vous ne trouvez pas de ressources?

Je viens de configurer un projet de test pour mon application Android pour utiliser Robolectric. J'ai suivi le démarrage rapide d'Eclipse . Une exception est soulevée en exécutant mon premier test simple.

java.lang.RuntimeException: java.lang.NullPointerException at com.xtremelabs.robolectric.res.ResourceLoader.init(ResourceLoader.java:93) at com.xtremelabs.robolectric.res.ResourceLoader.getStringValue(ResourceLoader.java:271) at com.xtremelabs.robolectric.shadows.ShadowResources.getString(ShadowResources.java:56) at android.content.res.Resources.getString(Resources.java) at org.xxx.mobile.android.teldir.app.TelephoneDirectoryTest.searchButtonLabelShouldBeGo(TelephoneDirectoryTest.java:22) [...] Caused by: java.lang.NullPointerException at com.xtremelabs.robolectric.res.StringResourceLoader.getValue(StringResourceLoader.java:17) at com.xtremelabs.robolectric.res.StringArrayResourceLoader.processNode(StringArrayResourceLoader.java:39) at com.xtremelabs.robolectric.res.XpathResourceXmlLoader.processResourceXml(XpathResourceXmlLoader.java:27) at com.xtremelabs.robolectric.res.DocumentLoader.loadResourceXmlFile(DocumentLoader.java:58) at com.xtremelabs.robolectric.res.DocumentLoader.loadResourceXmlDir(DocumentLoader.java:52) at com.xtremelabs.robolectric.res.DocumentLoader.loadResourceXmlDir(DocumentLoader.java:39) at com.xtremelabs.robolectric.res.ResourceLoader.loadValueResourcesFromDir(ResourceLoader.java:142) at com.xtremelabs.robolectric.res.ResourceLoader.loadValueResourcesFromDirs(ResourceLoader.java:136) at com.xtremelabs.robolectric.res.ResourceLoader.loadValueResources(ResourceLoader.java:109) at com.xtremelabs.robolectric.res.ResourceLoader.init(ResourceLoader.java:85) at com.xtremelabs.robolectric.res.ResourceLoader.getStringValue(ResourceLoader.java:271) at com.xtremelabs.robolectric.shadows.ShadowResources.getString(ShadowResources.java:56) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.xtremelabs.robolectric.bytecode.ShadowWrangler.methodInvoked(ShadowWrangler.java:87) at com.xtremelabs.robolectric.bytecode.RobolectricInternals.methodInvoked(RobolectricInternals.java:110) at android.content.res.Resources.getString(Resources.java) [...] 

Le test suit.

  • Passer un objet d'une activité à un fragment
  • Bouton et tirant gauche
  • NoClassDefFoundError pour la bibliothèque .jar au moment de l'exécution dans Android Studio
  • Comment connecter le projet Android Studio existant au dépôt Github existant
  • Envoyer un SMS via PhoneGap sur Android
  • Comment changer la couleur du clavier doux "Entrée" / "Suivant" bouton sur la sucette
  •  import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import com.xtremelabs.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class TelephoneDirectoryTest { private TelephoneDirectory activity; @Before public void setUp() { activity = new TelephoneDirectory(); } @Test public void searchButtonLabelShouldBeGo() throws Exception { String goLabel = activity.getResources().getString(R.string.search); assertEquals("Go", goLabel); } } 

    Il semble qu'il ne puisse pas trouver le dossier Android ./res . J'ai pointé la configuration JUnit vers ${workspace_loc:teldir-android} comme l'indique le guide. Et cela fait que Eclipse trouve l' AndroidManifest.xml , évitant d'autres erreurs, imho.

    En essayant d'éviter cette exception, j'ai également ajouté le dossier ./res comme dossier source de mon application Android, nettoyé et relancé tout, mais la même exception a été soulevée.

    Qu'est-ce que je fais mal?

  • Une fois pour toutes, comment sauvegarder correctement l'état d'instance de Fragments dans la pile arrière?
  • Module de liaison d'un projet externe dans Android Studio
  • Précharger la page Web en Android (en utilisant WebView?)
  • Comment configurer Alarm dans Android?
  • Connectez-vous avec les clients iOS et Android à SockJS Backend
  • Android Studio - tâche gradle à exécuter après SYNC
  • 6 Solutions collect form web for “Robolectric + Eclipse Vous ne trouvez pas de ressources?”

    Je devais ajouter une variable d'environnement à ma configuration d'exécution de test:

     ANDROID_HOME=C:/path/to/android-sdks 

    J'ai eu exactement le même problème (RuntimeException lors du chargement des ressources) lors de la première configuration de mon projet Eclipse avec Robolectric mais maintenant, il fonctionne.

    J'ai compris deux choses:

    • Si vous recevez un WARNING: Unable to find path to Android SDK (le message peut ne pas être affiché dans une version inférieure à 1.0-RC1) alors ResourceLoader n'a pas réussi à trouver votre racine SDK. L'une des méthodes recherche une variable d'environnement ANDROID_HOME qui devrait indiquer l'emplacement de votre SDK Android.
    • Enfin, il existe un bug qui provoque une exception si votre menu.xml n'est pas formaté d'une certaine manière.

    L'utilisation de Robolectric sans Maven ou Ant est possible mais il pourrait y avoir quelques autres bogues. Cette vidéo montre la configuration correcte du projet. Si cela ne fonctionne pas, obtenez la dernière version de Github (importez comme un projet Maven dans Eclipse et vous pourriez avoir besoin de github.com/mosabua/maven-android-sdk-deployer ) et commencez à déboguer!

    Si le ResourceNotFound ne se produit que pour les tableaux de chaînes définis avec les balises <array>...</array> , remplacez-les par <string-array>...</string-array>

    Utilisation de robolectric 2.0

    Lire dans: https://groups.google.com/forum/#!topic/robolectric/gQoY0bCguYs

    Docs: http://developer.android.com/guide/topics/resources/string-resource.html#StringArray

    Il est faux évidemment. Je devais configurer une façon formidable de faire des choses car vous ne pouvez pas lancer des tests robo-électriques d'eclipse car l'espace de travail Eclipse ne reconnaît toujours pas correctement les fichiers individuels liés à la source. Voir mon exemple alpha:

    https://github.com/shareme/Wabash

    La même erreur que je vois en passant … à partir des instructions de Pivotal Labs …

    Juste ce problème après avoir fait une nouvelle installation de Windows 8. Très probablement, Robolectric ne peut pas trouver le SDK. Pour le signaler au bon endroit. Vous pouvez générer un fichier local.properties dans votre projet Android. Cela peut se faire dans la ligne de commande en allant dans le dossier racine de votre projet et en émettant la commande:

     android update project –pc:\project\root\folder 

    Ouvrez local.properties pour vérifier que sdk.dir le chemin prévu.

    Assurez-vous également d'avoir téléchargé l'API android API 8. Robolectric recherche un dossier dans le répertoire /path/to/your/sdk/platforms/android-8 .

    Vous pouvez obtenir le fichier Jar dans ce lien. Téléchargez-le. Ajoutez JAR dans le projet thats it.i utilisé dans mon projet. Des doutes me demandent

    http://www.java2s.com/Code/JarDownload/robolectric/robolectric-1.2-8.jar.zip

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.