Suppression de Fichiers et de répertoires dans JUnit

Je suis en train d'écrire un test pour une méthode qui crée un fichier dans un répertoire. Voici ce que mon test JUnit ressemble:

  @Before
  public void setUp(){
      objectUnderTest = new ClassUnderTest();
      //assign another directory path for testing using powermock
      WhiteBox.setInternalState(objectUnderTest, "dirPathField", mockDirPathObject);

      nameOfFile = "name.txt";
      textToWrite = "some text";
  }

  @Test
  public void shouldCreateAFile(){


      //create file and write test
      objectUnderTest.createFile(nameOfFile, textToWrite);
      /* this method creates the file in mockPathObject and performs
         FileWriter.write(text);
         FileWriter.close();
      */

      File expect = new File(mockPathObject + "\\" + nameOfFile);
      assertTrue(expect.exist());

      //assert if text is in the file -> it will not be called if first assert fails
  }

  @After
  public void tearDown(){
       File destroyFile = new File(mockPathObject + "\\" + nameOfFile);
       File destroyDir = new File(mockPathObject);

       //here's my problem
       destroyFile.delete(); //why is this returning false?
       destroyDir.delete(); //will also return false since file was not deleted above

  }

J'ai été en mesure de supprimer le Fichier à l'aide de deleteOnExit() mais je ne vais pas être en mesure de supprimer le répertoire à l'aide de supprimer ou de deleteOnExit. Je vais faire d'autres test pour d'autres scénarios dans ce script de test donc je ne veux pas utiliser deleteOnExit.

Je ne sais pas pourquoi je ne peut pas le supprimer dans JUnit script de test alors que je peux supprimer un fichier créé et modifié par FileWriter dans l'exécution lorsque le code n'est pas un test JUnit. J'ai aussi essayé de l'exécution d'une infiniteLoop après la méthode de test et de supprimer manuellement le fichier mais il me dit que d'autres programme est encore en utilisant le fichier si je suis capable de modifier son contenu.

Espère que quelqu'un peut vous suggérer un moyen pour supprimer les fichiers et répertoires créés pendant les tests. Merci 😀

Pour plus de clarté, la méthode de test, je ressemble à ceci Unité de méthode d'analyse qui invoque FileWriter

Edit:Voici la méthode pour tester

    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();
           }

    }

Je ne peux pas modifier cette méthode comme créés par d'autres développeurs. J'ai été demandé de créer des tests unitaires pour l'automatisation des tests. Merci.

êtes-vous sûr objectUnderTest.createFile(nameOfFile, textToWrite); libérer toutes les ressources c'est à dire ferme un flux associé / écrivain ?
objectUnderTest.createFile(nameOfFile, textToWrite); effectue un FileWriter.close() après la création et l'écriture sur le fichier. J'ai aussi essayé de faire objectUnderTest=null sur le démontage, mais je ne peux toujours pas supprimer le fichier
Je voudrais utiliser un nom de fichier différent pour chaque test. Vous pouvez générer le nom d'un compteur.
Je pense que je ne peux toujours pas supprimer le répertoire même-je supprimer ces fichiers à l'aide deleteOnExit() car je ne peux pas le faire en un seul fichier
Nous allons voir comment objectUnderTest.createFile est de la manipulation/la fermeture de la FileWriter.

OriginalL'auteur Frank Smith | 2012-08-09