Löschen von Datei-und Verzeichnis in JUnit

Schreibe ich einen test für eine Methode, die erstellt eine Datei in einem Verzeichnis. Hier ist, was mein JUnit-test sieht wie folgt aus:

  @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

  }

War ich in der Lage, löschen Sie die Datei mit deleteOnExit (), aber ich werde nicht in der Lage sein, um das Verzeichnis zu löschen mit delete oder deleteOnExit. Ich führen auch andere Tests für andere Szenarien in diesem test-Skript, so habe ich nicht verwenden wollen deleteOnExit.

Ich weiß nicht, warum ich nicht löschen kann in JUnit-test-script, ich kann zwar eine Datei löschen, erstellt und geändert durch den FileWriter in runtime wenn Sie den code nicht ein JUnit-test. Ich habe auch versucht, die Durchführung einer infiniteLoop nach der test-Methode und die Datei manuell löschen, aber es sagt mir, dass andere Programm ist immer noch mit der Datei, obwohl ich in der Lage bin, zu ändern, seinen Inhalt.

Hoffe, jemand kann empfehlen, einen Weg, um löschen Sie die Dateien und Verzeichnisse erstellt, während des tests. Danke 😀

Für mehr Klarheit, die Methode, die ich testen sieht wie folgt aus Unit-Test-Methode aufruft, die FileWriter

Edit:Hier ist die Methode zu testen,

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

    }

Kann ich nicht ändern, diese Methode als andere Entwickler geschaffen haben. Ich wurde nur angewiesen, zu erstellen unit-tests für die Testautomatisierung. Danke.

sind Sie sicher, dass objectUnderTest.createFile(nameOfFile, textToWrite); alle Ressourcen freigeben, d.h. schließt alle zugehörigen stream / writer ?
objectUnderTest.createFile(nameOfFile, textToWrite); führt einen FileWriter.close() nach dem erstellen und schreiben auf die Datei. Ich habe auch versucht zu tun objectUnderTest=null auf tearDown aber ich kann immer noch nicht die Datei löschen
Ich würde Sie einen anderen Dateinamen verwenden Sie für jeden test. Generieren Sie den Namen mit einem Zähler.
Ich denke, ich kann immer noch nicht löschen Sie das Verzeichnis selbst lösche ich die Dateien mit deleteOnExit (), da ich es nicht mit einer einzigen Datei
Lassen Sie uns sehen, wie objectUnderTest.createFile ist der Umgang/schließen der FileWriter.

InformationsquelleAutor Frank Smith | 2012-08-09

Schreibe einen Kommentar