25. Testes Unitários com JUnit e Mockito

Ao aprender a programar em Java, um dos aspectos mais importantes que um desenvolvedor deve dominar é a capacidade de escrever testes confiáveis e eficientes. Testes unitários são uma parte fundamental do desenvolvimento de software, pois permitem que os desenvolvedores verifiquem o comportamento de unidades individuais de código (como métodos e classes) de forma isolada. Neste capítulo, vamos explorar como você pode escrever testes unitários eficazes usando as bibliotecas JUnit e Mockito.

O que são Testes Unitários?

Testes unitários são procedimentos que verificam o funcionamento de uma "unidade" de código, que pode ser um método ou uma classe inteira. O objetivo é garantir que cada parte do software funcione corretamente de forma independente, antes de ser integrada com outras partes do sistema. Isso ajuda a identificar e corrigir erros em estágios iniciais do ciclo de desenvolvimento, o que pode economizar tempo e recursos.

Introdução ao JUnit

JUnit é uma das frameworks mais populares para escrever testes unitários em Java. Ele fornece anotações e métodos de assertiva para facilitar a verificação do comportamento esperado do código. A versão mais recente, JUnit 5, traz muitas melhorias e novas funcionalidades em comparação com seu predecessor, JUnit 4.

Escrevendo um Teste Simples com JUnit

Para começar com JUnit, você precisa criar uma classe de teste. Por convenção, o nome dessa classe geralmente é o nome da classe que será testada, seguido por "Test". Dentro dessa classe, você escreverá métodos anotados com @Test, cada um representando um caso de teste específico.


import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class CalculadoraTest {

    @Test
    void testarSoma() {
        Calculadora calc = new Calculadora();
        assertEquals(5, calc.somar(2, 3), "A soma deve ser 5");
    }
}

Neste exemplo, a classe CalculadoraTest contém um método de teste testarSoma() que verifica se o método somar() da classe Calculadora está funcionando corretamente. A assertiva assertEquals() é usada para verificar se o resultado esperado (5) corresponde ao resultado obtido ao chamar calc.somar(2, 3).

Mockito para Simulação de Comportamentos

Em muitos casos, as unidades de código que você deseja testar dependem de outras classes ou recursos que podem ser difíceis de configurar ou que você não deseja invocar durante os testes unitários. É aqui que o Mockito entra em cena. Mockito é uma framework que permite criar "mocks", que são simulações de objetos reais que podem retornar dados específicos quando seus métodos são chamados.

Utilizando Mockito em Testes

Para usar Mockito, você geralmente começará criando um mock para a classe dependente usando o método mock(). Em seguida, você pode definir o comportamento desse mock com o método when(), especificando o que deve ser retornado quando métodos específicos são chamados.


import org.mockito.Mockito;
import static org.mockito.Mockito.*;

class ServicoTest {

    @Test
    void testarMetodo() {
        Dependencia dependenciaMock = mock(Dependencia.class);
        when(dependenciaMock.metodoDependente()).thenReturn("Valor Simulado");

        Servico servico = new Servico(dependenciaMock);
        String resultado = servico.metodoASerTestado();

        assertEquals("Valor Esperado", resultado);
    }
}

Neste exemplo, criamos um mock para a classe Dependencia e especificamos que, quando o método metodoDependente() for chamado, ele deve retornar "Valor Simulado". Isso permite testar o método metodoASerTestado() da classe Servico sem a necessidade de uma instância real da classe Dependencia.

Boas Práticas em Testes Unitários

Escrever testes unitários eficazes é uma arte que requer prática e atenção a detalhes. Aqui estão algumas boas práticas a seguir:

  • Independência: Cada teste deve ser independente dos outros. Isso significa que a execução de um teste não deve afetar o resultado de outro.
  • Repetibilidade: Um teste deve retornar o mesmo resultado toda vez que é executado, independentemente do ambiente ou da ordem de execução.
  • Legibilidade: Testes devem ser fáceis de ler e entender. Isso ajuda outros desenvolvedores a compreender o que está sendo testado e por quê.
  • Cobertura de Código: Busque uma boa cobertura de código com seus testes, mas lembre-se de que a qualidade dos testes é mais importante do que a quantidade.
  • Teste apenas a lógica de negócios: Evite testar a infraestrutura do framework ou a linguagem de programação.

Testes unitários são uma ferramenta poderosa no arsenal de qualquer desenvolvedor Java. Com a prática, você se tornará cada vez mais eficiente em escrever testes que garantem a qualidade e a confiabilidade do seu código. Ao utilizar frameworks como JUnit e Mockito, você pode simplificar o processo de teste e focar no que realmente importa: criar um software robusto e livre de erros.

Agora responda o exercício sobre o conteúdo:

Qual das seguintes afirmações é verdadeira em relação ao uso de JUnit e Mockito para testes unitários em Java?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Documentação com Javadoc

Próxima página do Ebook Gratuito:

121Documentação com Javadoc

4 minutos

Ganhe seu Certificado deste Curso Gratuitamente! ao baixar o aplicativo Cursa e ler o ebook por lá. Disponível na Google Play ou App Store!

Disponível no Google Play Disponível no App Store

+ de 6,5 milhões
de alunos

Certificado Gratuito e
Válido em todo o Brasil

48 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, áudio e texto