2008-10-29 6 views
17

J'écris un test pour une classe d'analyseur de fichiers. La méthode parse reçoit un nom de fichier en paramètre et doit l'ouvrir pour l'analyser (duh). J'ai écrit un fichier de test, que j'ai mis dans le répertoire test/resources dans mon répertoire de projet, et je voudrais passer ce fichier pour tester mon analyse. Puisque ce projet est dans CVS, et qu'il sera manipulé par d'autres, je ne peux pas coder le chemin du fichier, donc j'ai pensé à utiliser la propriété maven $ {basedir} pour construire le nom du fichier dans mon test. Quelque chose comme:Comment récupérer des propriétés maven dans un test JUnit?

public void parseTest() { 
    ... 
    sut.parse(${basedir} + "src/test/resources/testFile"); 
    ... 
} 

Est-ce que quelqu'un sait comment pourrais-je y parvenir?

Répondre

22

Vous avez 2 options:

1) Faire passer le chemin du fichier à votre test via une propriété système (docs)

Dans votre pom vous pouvez faire quelque chose comme:

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.4.2</version> 
     <configuration> 
      <systemProperties> 
      <property> 
       <name>filePath</name> 
       <value>/path/to/the/file</value> 
      </property> 
      </systemProperties> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

Ensuite, dans votre test, vous pouvez faire:

System.getProperty("filePath"); 

2) Mettez le fichier à l'intérieur de sr c/test/resources sous le même paquet que votre classe de test. Vous pouvez ensuite accéder au fichier en utilisant Class.getResourceAsStream (String fileName) (docs).

Je recommande fortement l'option 2 sur l'option 1. Passer des choses à vos tests via les propriétés du système est très sale IMO. Il couple inutilement vos tests au coureur d'essai et causera des maux de tête sur la route. Charger le fichier du classpath est le chemin à parcourir et c'est pourquoi maven a le concept d'un répertoire de ressources.

+0

Je vais prendre l'option 2. Mais comme je veux passer le nom du fichier, au lieu d'utiliser la méthode Class.getResourceAsStream (String fileName), j'utilise Class.getResource (String fileName) .getFile(). Merci Mike – Alexandre

+0

C'est cool. Sachez simplement que si vous devez exécuter les tests sur un JAR (ce qui est peu probable), vous pourriez avoir un comportement bizarre. –

+2

Vous ne savez pas exactement dans quelle mesure cette réponse est complète - qu'en est-il des propriétés de "test d'intégration" comme l'adresse de base de données locale que vous souhaitez stocker dans vos paramètres private.xml? –

Questions connexes