Il existe des différences et des contraintes dans les options offertes par @Steve C et @ ashosborne1. Il faut les préciser, je crois.
Quand pouvons-nous utiliser File resourcesDirectory = new File("src/test/resources");
:?
- 1 Lorsque les tests doivent être exécutés via maven uniquement, mais pas via IDE.
- 2.1 Quand les tests vont être exécutés via maven ou
- 2.2 via IDE et un seul projet est importé dans IDE. (J'utilise le terme «importé», car il est utilisé dans IntelliJ IDEA. Je pense que les utilisateurs d'éclipse importent également leur projet maven). Cela fonctionnera, car le répertoire de travail lorsque vous exécutez des tests via IDE est le même que votre projet.
- 3.1 Quand les tests vont être exécutés via maven ou
- 3.2 via IDE, et plusieurs projets sont importés dans IDE (lorsque vous n'êtes pas étudiant, vous importez généralement plusieurs projets), ET avant d'exécuter des tests via IDE, vous configurez manuellement le répertoire de travail pour vos tests. Ce répertoire de travail doit faire référence à votre projet importé qui contient les tests. Par défaut, le répertoire de travail de tous les projets importés dans IDE n'en est qu'un. C'est probablement une restriction de
IntelliJ IDEA
seulement, mais je pense que tous les IDE fonctionnent comme ça. Et cette configuration qui doit être faite manuellement, n'est pas bonne du tout. Travailler avec plusieurs tests existant dans différents projets maven, mais importés dans un grand projet «IDE», nous obligent à nous en souvenir et ne permettent pas de se détendre et de profiter de votre travail.
La solution offerte par @ ashosborne1 (personnellement, je préfère celle-ci) nécessite 2 exigences supplémentaires qui doivent être effectuées avant d'exécuter des tests. Voici une liste d'étapes pour utiliser cette solution:
Créez un dossier de test («teva») et un fichier («readme») à l'intérieur de «src / test / resources /»:
src / test / resources / teva / readme
Le fichier doit être créé dans le dossier de test, sinon cela ne fonctionnera pas. Maven ignore les dossiers vides.
Créez au moins une fois le projet via mvn clean install
. Il exécutera également des tests. Il peut être suffisant d'exécuter uniquement votre classe / méthode de test via maven sans construire un projet entier. Par conséquent, vos ressources de test seront copiées dans des classes de test, voici un chemin:target/test-classes/teva/readme
Après cela, vous pouvez accéder au dossier à l'aide de code, déjà proposé par @ ashosborne1 (je suis désolé, je n'ai pas pu modifier correctement ce code dans cette liste d'éléments):
public static final String TEVA_FOLDER = "teva"; ...
URL tevaUrl = YourTest.class.getClassLoader().getResource(TEVA_FOLDER);
String tevaTestFolder = new File(tevaUrl.toURI()).getAbsolutePath();
Vous pouvez maintenant exécuter votre test via IDE autant de fois que vous le souhaitez. Jusqu'à ce que vous exécutiez mvn clean. Il supprimera le dossier cible.
La création d'un fichier dans un dossier de test et l'exécution de maven pour la première fois, avant d'exécuter des tests via IDE, sont des étapes nécessaires. Sans ces étapes, si vous venez de créer des ressources de test dans votre IDE, puis d'écrire test et de l'exécuter via IDE uniquement, vous obtiendrez une erreur. L'exécution de tests via mvn copie les ressources de test dans target / test-classes / teva / readme et elles deviennent accessibles pour un chargeur de classe.
Vous pouvez vous demander, pourquoi ai-je besoin d'importer plus d'un projet maven dans IDE et pourquoi tant de choses compliquées? Pour moi, l'une des principales motivations: garder les fichiers liés à l'IDA loin du code. Je crée d'abord un nouveau projet dans mon IDE. C'est un faux projet, c'est juste un détenteur de fichiers liés à l'IDE. Ensuite, j'importe des projets maven déjà existants. Je force ces projets importés à conserver les fichiers IDEA uniquement dans mon faux projet d'origine. Par conséquent, je ne vois pas de fichiers liés à l'IDE dans le code. SVN ne devrait pas les voir (ne proposez pas de configurer svn / git pour ignorer ces fichiers, s'il vous plaît). C'est aussi très pratique.