2010-01-27 8 views
3

Je souhaite tester l'analyse des données renvoyées par le serveur. J'ai pensé que je pourrais créer plusieurs fichiers XML de test, puis les transmettre à l'analyseur syntaxique qui utilise mon gestionnaire de données personnalisé (comme dans l'application que je teste).Test des sources de données dans les tests unitaires Android

Mais où dois-je mettre ces tests XML?

J'ai essayé avec [project_root]/res/xml, mais je reçois l'erreur:

android.content.res.Resources$NotFoundException: Resource ID #0x7f040000 type #0x1c is not valid at android.content.res.Resources.loadXmlResourceParser(Resources.java:1870) at android.content.res.Resources.getXml(Resources.java:779)

Est-ce que cela signifie que le fichier XML est invalide ou que Android n'a pas pu trouver le fichier XML? (J'utilise le même code XML qui vient du serveur - copié à partir du panneau réseau du firebug et collé dans le fichier). Puis-je lire ce XML en tant que fichier texte, puisque getContext().getResources().getXml(R.xml.test_response1) renvoie XmlResourceParser au lieu de String (ce que je préfère)?

Répondre

1

vous mettre xmls dans MyAppTest/assets, par exemple MyAppTest/assets/my.xml, puis le lire à l'aide

InputStream myxml = getInstrumentation().getContext().getAssets().open("my.xml"); 

vous pouvez alors invoquer l'analyseur avec ce flux.

+1

java.io.FileNotFoundException: test_response1.xml à android.content.res.AssetManager .openAsset (méthode native) – zorglub76

+1

Je ne sais pas ce qui se passe .. Quand j'appelle getContext(). getAssets(). list ("/"), j'obtiens une liste de plusieurs fichiers et dossiers parmi lesquels "assets" dossier. Quand je liste ensuite les fichiers dans le dossier "/ assets", je n'ai rien - comme si le dossier est vide ... – zorglub76

+0

Selon le fichier xml (dans les ressources de votre application ou les tests de votre test), vous avez besoin du bon contexte pour trouver à travers getAssets(). –

1

mis simplement le fichier dans votre package en cours (par exemple dans un ensemble de ressources) et d'utiliser le chargeur de classe ...

private InputStream getTestImage(String pathToFile) throws IOException 
     { 
      final ClassLoader loader = getClass().getClassLoader(); 
      assertNotNull(loader); 
      final InputStream resourceAsStream = loader.getResourceAsStream(pathToFile); 
      assertNotNull(resourceAsStream); 
      return resourceAsStream; 
     } 
+0

Je pense que cela ne fonctionnera pas à cause de: http://code.google.com/p/android/issues/detail?id=10076 essentiellement parce que l'outil dex ignorera tous les fichiers non-classe à moins qu'il ne soit exécuté avec des paramètres supplémentaires. – Maks

+0

Cela fonctionne très bien pour moi en utilisant ICS lors de la lecture des fichiers placés dans le dossier "res/raw" dans le projet ** test ** (pas le projet de l'application en cours de test!) – Maks

Questions connexes