Testando classes que lidam com arquivos com jUnit Rules e TemporaryFolder

É quase que mandatório todo projeto Java ter uma classe FileUtils da vida para manipular arquivos… É ou não é?

public class FileUtils {

    /**
     * Lista todos os arquivos de um diretorio
     */
    public static List<File> lista(File diretorio) {
        File[] arquivos = diretorio.listFiles();
        return Arrays.asList(arquivos);
    }

    public static void deleta(File arquivo) { ... }

    public static void copia(File origem, File destino) { ... }

    public static void escreve(File arquivo, String conteudo) { ... }

    // outros métodos
}

Mas infelizmente ela não é levada tão a sério assim! No geral ela é testada manualmente“por tabela” quando testamos outra funcionalidade do sistema.

@Repository
public UsuarioDao {
    
    @Transactional
    public void deleta(Usuario usuario) {
        this.entityManager.remove(usuario);
        FileUtils.deleta(usuario.getFoto()); // deleta foto do disco
    }
}

Essa prática leva a problemas que você já deve conhecer bem, como brechas para bugs! O que fazer então? Simples, cubra a classe com testes automatizados!

Por azar nosso testar uma classe que acessa disco não é tão simples quanto um teste de unidade qualquer, por esse motivo existe alguns detalhes que você precisa saber antes de programar a 1a linha de teste (isso é muito importante!). Para entender estes detalhes, leia o novo post no blog daTriadWorks:

[Blog] Testes de Integração na prática: testando classes que manipulam arquivos com jUnit

De quebra você ainda conhece uma feature do jUnit que facilita em N vezes a escrita dos seus testes e principalmente a vida da equipe:

public class FileUtilsTest {

    @Rule
    public TemporaryFolder temp = new TemporaryFolder();

}

E aí, o que achou da dica? Aproveita e compartilha esse post com seus amigos e sua equipe – dá para tirar boas discussões daí!

Leave a Reply

Your email address will not be published. Required fields are marked *