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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die @Rule-annotation und die
TemporaryFolder
classfor den Ordner, den Sie löschen zu müssen.http://kentbeck.github.com/junit/javadoc/4.10/org/junit/Rule.html (404 nicht gefunden)
Update Beispiel der Nutzung von http://junit.org/junit4/javadoc/4.12/org/junit/rules/TemporaryFolder.html:
Können Sie den Ordner, den Sie möchten, erstellen Sie einen Ordner innerhalb eines TemporaryFolder? ie: mockDirPath ist ein Unterordner des TemporaryFolder.
Vielleicht.. solange werde ich nicht ändern Sie die Klasse unter test. Ich werde versuchen und hoffen, dass die Dateien unter temporaryFolder wird verschwunden sein, nachdem Sie den test :D. Danke für die Anregung.
InformationsquelleAutor Colin D
Dies ist, wie ich in der Regel bereinigen Dateien:
Ihrem Verzeichnis muss leer sein, um es zu löschen, stellen Sie sicher, dass keine anderen test-Methoden werden die Schaffung von mehr Dateien gibt.
Gewährleisten, schließen Sie das FileWriter-Instanz in einem finally-block.
InformationsquelleAutor davidmontoyago
Sicherzustellen, dass die Methode
objectUnderTest.createFile(nameOfFile, textToWrite)
tatsächlich schließt alle geöffneten streams?InformationsquelleAutor adarshr