À l'heure actuelle, j'ai une bibliothèque Java qui a une classe de test. Dans cette classe, je veux accéder à certains fichiers situés sur mon disque dur.
Le build.gradle ressemble à ceci:
apply plugin: 'Java'
dependencies {
testCompile 'junit:junit:4.11'
}
Mon fichier est sous Java_lib/src/test/assets/file.xml
et la classe Java est sous Java_lib/src/test/Java/<package_name>.Java
Donc j'exécute
final InputStream resourceAsStream = this.getClass().getResourceAsStream("assets/file.xml");
Malheureusement, je suis nul. Qu'est-ce que je fais mal?
Pour faire avancer les choses, vous devez ajouter ce qui suit dans le fichier gradle:
task copyTestResources(type: Copy) {
from "${projectDir}/src/test/resources"
into "${buildDir}/classes/test"
}
processTestResources.dependsOn copyTestResources
Cela consiste essentiellement à copier tous les fichiers du répertoire src/test/resource
dans build/classes/test
, puisque this.getClass().getClassLoader().getResourceAsStream(".")
pointe sur build/classes/test
.
Le issue est déjà connu de Google et veut le résoudre dans Android Studio 1.2 (car ils ont besoin d’IntelliJ14 pour cela et il semble que cela sera inclus dans Android Studio 1.2)
Essayez de placer file.xml
sous src/test/resources
et utilisez this.getClass().getResourceAsStream("file.xml")
(sans le préfixe du dossier)
Le problème semble être que le dossier assets
ne fait pas partie du chemin d'accès aux classes d'exécution du test. Par conséquent, this.getClass().getResourceAsStream("assets/file.xml")
ne serait pas en mesure de résoudre le chemin comme prévu.
Par défaut, le dossier des ressources de test dans un projet Java Gradle est src/test/resources
(identique à un projet Java Maven). Vous pouvez le remplacer dans le dossier assets
si vous le souhaitez en ajoutant ceci dans le fichier build.gradle
du projet:
sourceSets.test {
resources.srcDirs = ["src/test/assets"]
}
Dans build.gradle
, ajoutez ceci:
sourceSets.test {
resources.srcDirs = ["src/test"]
}
Dans votre code, accédez à votre ressource comme ceci:
getClass().getClassLoader().getResourceAsStream("assets/file.xml"));
Travaille pour moi.
Merci de signaler le problème Google numéro J'ai cherché ce sujet toute la journée ...
Dans "Android Studio 1.1 RC 1" (outil de génération de dégradés 1.1.0-rc1), il n'est pas nécessaire d'ajouter la solution de contournement au fichier de dégradés, mais vous devez exécuter le test à partir du menu de la tâche de dégradé (ou de la commande Invite). !
Cela a fonctionné pour moi (3 ans plus tard, grade 4.10)
subprojects {
junitPlatformTest.dependsOn processTestResources
}