J'écris un test pour une méthode qui crée un fichier dans un répertoire. Voici ce que mon test Junit ressemble à:
public void createFile(String fileName, String text){ //SOME_PATH is a static string which is a field of the class File dir = new File(SOME_PATH); //I modified SOME_PATH using whitebox for testing if(!dir.exists()){ booelan createDir = dir.mkdirs(); if(!createDir){ sysout("cannot make dir"); return; } } try{ FileWriter fileWrite = new FileWriter(dir.getAbsolutePath() + "/" + fileName, true); fileWrite.write(text); fileWrite.close(); } catch(Exception e){ e.printStackTrace(); } }
4 Réponses :
Utilisez l'annotation @RULE et le http://kentbeck.github.com/junit/javadoc/4.10/org/junit/rule.html em> (404 non trouvé) p> Mise à jour Exemple d'utilisation par http://junit.org/junit4/javadoc/4.12/org /junit/roules/temporaryfolder.html : p> temporaire temporaire code> class pour le dossier que vous devez supprimer.
Je ne pense pas pouvoir utiliser temporaire depuis la méthode que je teste est celle qui crée le dossier et le fichier
Pouvez-vous faire le dossier que vous souhaitez créer un dossier à l'intérieur d'un temporaire temporaire? IE: MockDirpath est un sous-dossier du temporaire.
Peut-être .. Tant que je ne modifierai pas la classe sous test. Je vais essayer d'espérer que les dossiers sous temporaire seront partis après le test: d. Merci pour la suggestion.
Assurez-vous que la méthode ObjectUndertest.Createfile (Nomoffile, TextTowrite) Code> ferme réellement tous les flux ouverts? P>
Objecdertest.CreatEfile (...) effectue un fichier filewriter.Close (); Après avoir créé et écrire dans le fichier
C'est comme ça que je nettoie habituellement des fichiers: Votre répertoire doit être vide pour la supprimer, assurez-vous qu'aucune autre méthode de test ne crée plus de fichiers. P>
Oui, mais le problème est que je ne peux pas supprimer le fichier, même si je suis sûr que le FileWriter est fermé dans la méthode testée. Je ne peux pas non plus exécuter ceci si je supprime le fichier en utilisant deleteonexit
Je pense que la meilleure approche est la suppression après la sortie JVM:
Path tmp = Files.createTempDirectory(null); tmp.toFile().deleteOnExit();
AVERTISSEMENT À propos de Deleteonexit: Si vous appelez DeleteonExit beaucoup par exemple pour des fichiers temporaires et que votre application fonctionne pendant une longue période, par exemple JBoss Application Server, vous pouvez obtenir des erreurs de Memorory comme VM suivie une liste très longue de fichiers à supprimer au système. sortie qui ne se produit pas.
êtes-vous sûr que
objectedertest.createfile (Nomoffile, TextTowrite); Code> Libérez toutes les ressources I.E. Ferme tout ruisseau / écrivain associé?
objectedertest.CreatEfile (Nomoffile, TextTowrite); Effectue un fichier filewriter.Close () après la création et l'écriture dans le fichier. J'ai aussi essayé de faire ObjecderStest = null sur la déchirure mais je ne peux toujours pas supprimer le fichier
J'utiliserais un nom de fichier différent pour chaque test. Vous pouvez générer le nom avec un compteur.
Je pense que je ne peux toujours pas supprimer le répertoire même que je supprime ces fichiers à l'aide de Deleteonexit () car je ne peux pas le faire avec un seul fichier
Voyons comment ObjecderStest.CreatEfile traite / fermez le digitalwriter.
J'ai également eu le même problème et après avoir lu des conseils par A4L, j'ai commencé à vérifier tous les flux d'entrée et de sortie, associé à ce fichier, associé à ce fichier: dès que je vous ai assuré que chaque flux est fermé, je pourrais supprimer le fichier en démolition!