Quelle est la façon correcte d'écrire dans le fichier temporaire lors de tests unitaires avec Maven?
J'ai écrit un test unitaire qui écrit un fichier dans le système de fichier sans chemin de l'écriture sur le répertoire de travail; donc, s'il est exécuté à partir du répertoire du projet, il a écrit dans la racine du projet, si dans les projets répertoire parent, il écrit pour les parents répertoire racine.
Alors, quelle est la façon correcte d'écrire dans le répertoire cible? Très probablement un répertoire dans le répertoire cible?
Si je l'ai tout simplement spécifier target/
avec le fichier, il va écrire à la mère de projets cible au lieu de les projets de la cible.
Mise à JOUR: en fait, je veux le fichier après la fin du test. Le fichier est pour une extraction format pour les tierces parties qui doit être envoyé à la troisième parties. Le test peut être activé/désactivé pour me permettre d'exécuter uniquement si le format du fichier est modifiée pour re-approbation. Ce n'est pas un énorme problème où le fichier va, mais je voudrais quelque chose qui est facile à trouver.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer d'utiliser TemporaryFolder JUnit @Règle comme décrit ici
Après La Question À Jour
Vous pouvez changer le répertoire de travail utilisé par
maven-surefire-plugin
.Vous pouvez changer le répertoire de travail de tout ce dont vous avez besoin pour vos tests comme
${project.build.directory}/my_special_dir/
.Le répertoire de travail dans le plugin surefire affecte uniquement les tests en cours d'exécution et UNIQUEMENT pour des tests soient réalisés par maven. Si vous exécutez vos tests à partir de l'intérieur d'un IDE le répertoire de travail sera autre chose.
Pas besoin de réinventer la roue...
Le JDK fournit un moyen de créer un fichier temporaire, et un moyen pour supprimer automatiquement sur la sortie:
Utiliser le fichier et il sera supprimé automatiquement lorsque votre test terminé. C'est tout là est à lui.
Pour spécifier le répertoire à utiliser pour les fichiers temporaires, l'utilisation de la méthode surchargée:
/var/folders/xf/scvh7yr11m1glr4b663n1hcsnv5lf0/T/test2614442099335581603.xml
Je voudrais écrire un programme qui détermine l'emplacement où le fichier doit être écrit, que je unitest par la suite, en général, j'essaie d'éviter (autant que possible) d'accéder à des données persistantes dans unittests, comme les e /s de fichier ou de base de données access, ce qui a des raisons de performances et d'autres aussi.
Prendre un coup d'oeil à ce asnwer: https://stackoverflow.com/a/8032504/395659
Vous voulez être en mesure d'exécuter vos tests à la fois à partir d'un IDE ainsi que de Maven, de sorte que la meilleure pratique consiste à écrire vos tests afin qu'ils ne présumez pas qu'ils sont en cours d'exécution à l'intérieur de Maven.
L'une des meilleures façons de traiter avec des fichiers temporaires est à l'aide de junit règles. Cela permet de s'appuyer sur la règle pour les nettoyer pour vous.
Fichiers temporaires doit être créé dans le répertoire temporaire. Extraire à l'aide de l'appel
System.getProperty("java.io.tmpdir")
Fichier temporaire devrait être temporaire, c'est à dire doit être enlevé lorsqu'il n'est pas nécessaire. Pour réaliser cela, ne pas oublier de le supprimer dans
finally
bloc ou dans le code qui s'exécute après le test, c'est à dire:et/ou
Utilisation
File.createTempFile(String prefix, String suffix)
si c'est possible, c'est à dire que vous pouvez ensuite utiliser le fichier avec un nom spécial généré parcreateTempFile()
.Utilisation
file.deleteOnExit()
. Cela crée crochet qui supprime le fichier automatiquement lorsque la JVM est terminée. Le fichier reste que si la JVM a été tué aveckill -9
, donc il n'a pas la possibilité de s'exécuter, le code d'arrêt.À l'avance, je suis fortement contre faire de telles choses dans l'unité de test. Je n'ai pas vraiment essayé, mais ça devrait fonctionner:
Supposons que vous êtes à l'aide de plugin surefire, à partir du document, il est stipulé que vous pouvez accéder au répertoire de base du projet soumis à l'essai par
System.getProperty("basedir")
. Obtenir et créer des fichiers sous basedir/cible.Plus "approprié" chemin (que nous pouvons avoir de la chance que nous avons configuré répertoire de sortie pour quelque chose d'autre, vous pouvez modifier le plugin surefire config à quelque chose comme ceci:
Ensuite, vous pouvez obtenir le véritable répertoire de sortie par
System.getProperty("myOutDir")
dans votre test.