web-dev-qa-db-fra.com

Fichier d'accès au test JUnit dans l'environnement Gradle

À 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?

12
Niklas

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)

14
Niklas

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"]
}
5
Invisible Arrow

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.

2
ToYonos

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). !

0
Thorre

Cela a fonctionné pour moi (3 ans plus tard, grade 4.10)

subprojects {   
  junitPlatformTest.dependsOn processTestResources
}
0
DALDEI