Testar código que manipula arquivos com o JUnit em geral é muito chato. Os testes ficam cheios de código que usa a API de io do Java e que deixa de expressar o comportamento do código.
A classe TemporaryFolder do JUnit 4.7 tem uma API para criar arquivos e diretórios dentro de um diretório temporário. Essa classe usa o mecanismo de @Rule do JUnit 4 apagar arquivos depois de cada teste (depois até do @After do teste atual).
public class FileUploaderTest {
@Rule
public TemporaryFolder folder = new TemporaryFolder();
private static final String INPUT_FILENAME = "input.ext";
private static final String OUTPUT_FILENAME = "output.ext";
private FileUploader fileUploader;
private File inputFile;
private File outputDir;
@Before
public void setUp(){
outputDir = folder.newFolder("outputDir");
fileUploader = new FileUploader(outputDir);
inputFile = new File(INPUT_FILENAME);
}
@Test
public void shouldWriteTheUploadedFile() throws IOException{
inputFile = folder.newFile(INPUT_FILENAME);
fileUploader.upload(inputFile, OUTPUT_FILENAME);
File outputFile = new File(outputDir, OUTPUT_FILENAME);
assertTrue(outputFile.exists());
}
@Test(expected=FileUploadException.class)
public void inputFileShouldNotBeADirectory(){
inputFile = folder.newFolder(INPUT_FILENAME);
fileUploader.upload(inputFile, OUTPUT_FILENAME);
}
}