JUnit, Testes

JUnit 4 e arquivos

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);
	}
}
Anúncios
Testes

A Arte Perdida de Testar o Software

Jorge Diz, da Teamware, escreveu no post A Arte Perdida de Testar Software sobre como o projeto do System/360 da IBM, do início da década de 60, tinha 40k m2 de máquinas exclusivamente alocadas para testes, executando centenas de cenários de teste sem parar.

Estamos redescobrindo a importância de testar software. E porque durante todo esse tempo não demos importância para testes de software?

Minha explicação: falta de profissionalismo.