Android Studio de tests unitaires: lire des données (input) fichier
Dans un test unitaire, comment puis-je lire des données à partir d'un fichier json sur mon (bureau) du système de fichiers, sans coder en dur le chemin?
Je voudrais lire le test d'entrée (pour mon analyse des méthodes) à partir d'un fichier au lieu de créer des Chaînes statiques.
Le fichier est dans le même emplacement que mon unité de test de code, mais je peux aussi le placer ailleurs dans le projet si besoin. Je suis l'aide d'Android Studio.
- J'ai essayé presque toutes les combinaisons avec IOUtils.toString( ce.getClass().getResourceAsStream("test_documents.json"), "UTF-8"), elle renvoie toujours null. Probablement parce que les fichiers ne sont pas inclus dans le pot.
- Nous parlons de l'unité de tests impliquant émulateur android/appareil?
- Je pense que nous parlons de la nouvelle unité de test introduit dans la version récente d'Android Studio tools.android.com/tech-docs/unit-testing-support
- où placez-vous
test_documents.json
? répertoire actif? - Oui, nous parlons de la nouvelle unité de test à l'appui, n'impliquant pas l'émulateur/de l'appareil. Je n'ai pas le placer dans l'actif dir, parce qu'alors il devient emballés avec le live apk. Je l'ai placé dans le même dossier que le test (java) des fichiers.
- J'ai mis à jour ma réponse, il devrait vous satisfaire.
Vous devez vous connecter pour publier un commentaire.
Selon
android-gradle-plugin
version:1. la version 1.5:
Vient de mettre fichier json à
src/test/resources/test.json
et de référence commePas de gradle modification est nécessaire.
2. la version en dessous de 1.5: (ou si pour une raison quelconque solution ci-dessus ne fonctionne pas)
Vous assurer que vous utilisez au moins Android Plugin Gradle version 1.1. Suivez le lien pour configurer Android Studio correctement.
Créer
test
répertoire. Mettre l'unité de classes de test dansjava
répertoire et de mettre votre fichier de ressources dansres
répertoire. Android Studio devrait marquer comme suit:Créer
gradle
tâche de copie ressources dans le répertoire classes pour les rendre visibles pourclassloader
:Maintenant, vous pouvez utiliser cette méthode pour obtenir
File
de référence pour le fichier de ressources:src/test/resources/test.json
et de référence commeclassLoader.getResource("test.json")
. Pas de gradle modification est nécessaire. Les dossiers imbriqués à l'intérieur deresources
sont également.Could not get unknown property 'assembleDebug' for project ':app' of type org.gradle.api.Project.
une idée?classLoader
? où placer cette ligne de code? que pouvez-vous faire avec le résultat de retour?. Veuillez fournir plus de code complet. -1./src/test/resources/file.txt
dans Kotlin:TestClassName::class.java.getResource("/file.txt")!!.readText()
Local pour les tests unitaires (par rapport à l'instrumentation de tests), vous pouvez mettre des fichiers en vertu de
src/test/resources
et de les lire à l'aide du chargeur de classe. Par exemple, le code suivant ouvremyFile.txt
fichier dans le répertoire de ressources.Il a travaillé avec
val myFile = ClassLoader.getSystemResource("myFile.txt").readText()
Dans mon cas, la solution était d'ajouter à la gradle fichier
Après tout ce qui a été trouvé par 2.3.1
root/app/src/test/resources/test.json
2. lire les données comme ceci:val jsonFile = ClassLoader.getSystemResource("test.json").readText()
J'ai eu beaucoup de problèmes avec les ressources de test dans Android Studio alors je l'ai mis en place quelques tests pour plus de clarté. Dans mon
mobile
(Application Android) projet j'ai ajouté les fichiers suivants:La classe de test (tous les tests de passe):
Dans le même projet de racine j'ai un Java (pas Android) projet appelé
data
. Si j'ajoute les mêmes fichiers de données projet:Puis tous les tests ci-dessus échoue si je les exécuter à partir d'Android Studio, mais ils passent sur la ligne de commande avec
./gradlew data:test
.Pour la contourner-je utiliser ce hack (en Groovy)
Utilisation:
resource('/test.txt')
Android Studio 2.3, Gradle 3.3
getClassLoader()
versions fonctionnent comme prévu. I. e. ils trouvent les fichiers, tous deux gérés à partir d'Android Studio ET à partir de la ligne de commande sur mon macOS machine, et sur le Linux serveur CI (CircleCI). Donc, je vais avec qui et en espérant Gradle 3.3 ne pas le casser plus tard...build/resources/test
n'étant pas inclus dans le interactive classpath.Si vous allez à Exécuter -> Modifier les configurations -> JUnit, puis sélectionnez la configuration d'exécution de vos tests unitaires, il est un "répertoire de Travail" réglage. Qui pointent à l'endroit où votre fichier json est. Gardez à l'esprit ce qui pourrait casser d'autres tests.
new File()
ou similaires, mais il ne fonctionne pas directement avec le classpath de chargement méthode décrite ci-dessus. C'est aussi un peu difficile, car chaque nouvel exécuter des besoins de configuration pour définir le travail dir, et par défaut et Gradle ligne de commande comme pour l'utilisation de travail différentes dirs... une douleurJ'ai pensé ajouter mes résultats ici. Je sais que c'est un peu vieux mais pour les nouvelles versions de Gradle, où il n'y a PAS de src/test/resources répertoire, mais un seul répertoire de ressources pour l'ensemble du projet, vous devez ajouter cette ligne à votre Gradle fichier.
En faisant cela, vous pouvez accéder à vos ressources avec:
J'ai été la recherche de ce et ne pouvait pas trouver une réponse, j'ai donc décidé d'aider les autres ici.