org.junit.rules.TemporaryFolder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of junit Show documentation
Show all versions of junit Show documentation
JUnit is a regression testing framework written by Erich Gamma and Kent Beck.
It is used by the developer who implements unit tests in Java.
package org.junit.rules;
import java.io.File;
import java.io.IOException;
import org.junit.Rule;
/**
* The TemporaryFolder Rule allows creation of files and folders that are
* guaranteed to be deleted when the test method finishes (whether it passes or
* fails):
*
*
* public static class HasTempFolder {
* @Rule
* public TemporaryFolder folder= new TemporaryFolder();
*
* @Test
* public void testUsingTempFolder() throws IOException {
* File createdFile= folder.newFile("myfile.txt");
* File createdFolder= folder.newFolder("subfolder");
* // ...
* }
* }
*
*/
public class TemporaryFolder extends ExternalResource {
private File folder;
@Override
protected void before() throws Throwable {
create();
}
@Override
protected void after() {
delete();
}
// testing purposes only
/**
* for testing purposes only. Do not use.
*/
public void create() throws IOException {
folder= newFolder();
}
/**
* Returns a new fresh file with the given name under the temporary folder.
*/
public File newFile(String fileName) throws IOException {
File file= new File(getRoot(), fileName);
file.createNewFile();
return file;
}
/**
* Returns a new fresh file with a random name under the temporary folder.
*/
public File newFile() throws IOException {
return File.createTempFile("junit", null, folder);
}
/**
* Returns a new fresh folder with the given name under the temporary folder.
*/
public File newFolder(String... folderNames) {
File file = getRoot();
for (String folderName : folderNames) {
file = new File(file, folderName);
file.mkdir();
}
return file;
}
/**
* Returns a new fresh folder with a random name under the temporary
* folder.
*/
public File newFolder() throws IOException {
File createdFolder= File.createTempFile("junit", "", folder);
createdFolder.delete();
createdFolder.mkdir();
return createdFolder;
}
/**
* @return the location of this temporary folder.
*/
public File getRoot() {
if (folder == null) {
throw new IllegalStateException("the temporary folder has not yet been created");
}
return folder;
}
/**
* Delete all files and folders under the temporary folder.
* Usually not called directly, since it is automatically applied
* by the {@link Rule}
*/
public void delete() {
recursiveDelete(folder);
}
private void recursiveDelete(File file) {
File[] files= file.listFiles();
if (files != null)
for (File each : files)
recursiveDelete(each);
file.delete();
}
}