junit-exceptions

Como você testa os fluxos alternativos do seu código?

Deixa eu te perguntar: quantos cenários de testes você enxerga no código abaixo:

/**
 * Registrar novo lance no leilão
 */
public void darLance(Lance lance) {
    
    if (lance.getValor() <= 0)
        throw new RuntimeException("Lance com valor negativo");
    
    this.lances.add(lance);
}

E aí, quantos? 1, 2 ou 3 casos de teste? Não é tão simples assim não, é mesmo?

Um especialista de Q&A responderia facilmente, afinal ele estudou muito para isso! Mas nós desenvolvedores temos maior dificuldade, precisamos de experiência para identificar cenários em código e muitas vezes até ferramentas de cobertura de código:

analisando-cobertura-de-codigo-eclemma_large

Não identificar fluxos de negócio em um trecho de código pode trazer diversos bugs para o sistema. Não é por acaso, como testar algo que não conseguimos enxergar?

Não dá né…

Um boa maneira de melhorar sua percepção é escrevendo testes automatizados. Escrever testes aumenta nossa percepção a um nível surpreendente. 

Para te ajudar a entender toda a problemática, acabamos de blogar sobre o assunto e porque você deveria se preocupar com os fluxos alternativos do seu código:

[Post] jUnit: testando fluxos de exceção e erro

Cobrir fluxos alternativos e excepcionais com testes é muito barato se comparado a testes manuais. Você nem vai precisar levantar seu Tomcat outra vez…

PS: e aí, quantos cenários você encontrou? Comenta aí embaixo, vamos bater uma bola…

jUnit: testando classe que mexem com arquivos

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í!

Novo Curso: TDD e Testes Automatizados com Java

É com muito prazer que venho anunciar o mais novo curso da TriadWorks: TDD e Testes Automatizados com Java.

No curso você aprende a fazer TDD e escrever testes automatizados para sua aplicação!Você vai do 1o teste com jUnit, até TDD, testes de tela com Selenium WebDriver e build automatizado. Tudo em um curso enxuto e 100% prático com a didática diferenciada da TriadWorks que você conhece.

Para você ter idéia, este é o super resumo do conteúdo do nosso treinamento de TDD e testes em Java:
  1. Conscientização da importância dos testes;
  2. Testes de Unidade com jUnit;
  3. Mocks com o melhor framework do mercado: Mockito;
  4. Testes de Integração: teste seu SQL, DAO e acesso a banco de dados;
  5. Testes de ponta a ponta com Selenium WebDriver;
  6. TDD e refatoração contínua do seu código;
  7. Build Automatizado: compilando, testando e empacotando seu projeto;
  8. e muito mais…

Com instrutores com +7 anos de experiência fazendo TDD e testes automatizados com Java, nós temos uma boa idéia do que você precisa aprender para sair da inércia e escrever suas primeiras linhas de testes e ainda convencer sua equipe a adotá-los no projeto…

Falando nisso, estamos com descontos especiais para esta 1a turma! Clica no link abaixo, veja todo o conteúdo programático e faz tua inscrição:

>> Conheça o Curso TDD e Testes Automatizados com Java

Ah! Aproveito para te pedir um grande favor…Se você tiver um ou dois amigos que possam se beneficiar deste curso, por favor, me ajuda a divulgá-lo para eles! Tenho certeza que o investimento no aprendizado de testes trará retorno para vida profissional deles.

Então, o que achou do curso e do conteúdo programático?