30.14. Desenvolvendo APIs REST com Spring Boot: Testes unitários e de integração

Ao desenvolver uma API REST com o Spring Boot, garantir a qualidade do código e a confiabilidade dos endpoints é essencial. Uma maneira eficaz de alcançar esse objetivo é implementar testes unitários e de integração. Nesta seção, vamos explorar como criar e executar esses testes dentro de um projeto Spring Boot, garantindo que sua API REST funcione como esperado.

Testes Unitários

Testes unitários são a base para qualquer estratégia de teste em desenvolvimento de software. Eles são rápidos, isolados e focam em uma pequena parte do código, como métodos ou classes. No contexto do Spring Boot, geralmente utilizamos frameworks como JUnit e Mockito para escrever testes unitários.

JUnit

O JUnit é um framework de teste para a linguagem de programação Java que nos permite escrever e executar testes repetíveis. Com o JUnit, podemos assegurar que os métodos das nossas classes estão funcionando conforme o esperado.

Mockito

Mockito é uma framework que permite criar objetos simulados (mocks) em testes unitários. Isso é útil quando precisamos testar a lógica de uma classe sem depender de suas dependências externas, como bancos de dados ou outros serviços.

Exemplo de Teste Unitário


@SpringBootTest
public class UserServiceTest {

    @MockBean
    private UserRepository userRepository;

    @Autowired
    private UserService userService;

    @Test
    public void whenSaveUser_thenSuccess() {
        User user = new User("John Doe", "john.doe@example.com");
        Mockito.when(userRepository.save(user)).thenReturn(user);

        User created = userService.createUser(user);

        assertThat(created.getName()).isEqualTo(user.getName());
        assertThat(created.getEmail()).isEqualTo(user.getEmail());
    }
}

No exemplo acima, estamos testando o método createUser de UserService. Utilizamos @MockBean para simular o UserRepository e @Autowired para injetar a instância de UserService que queremos testar. Com o Mockito, simulamos o comportamento do método save do repositório para retornar o usuário que estamos criando. Assim, podemos verificar se o serviço está funcionando corretamente sem a necessidade de interagir com o banco de dados.

Testes de Integração

Testes de integração são importantes para garantir que diferentes partes do sistema funcionem juntas. No Spring Boot, podemos usar o Spring MVC Test Framework para simular chamadas HTTP para a API e verificar o comportamento da aplicação como um todo.

Spring MVC Test Framework

Este framework permite que você escreva testes que enviam requisições HTTP para o DispatcherServlet (o front controller do Spring MVC) e verificam as respostas. Com isso, é possível testar os controladores, rotas e status de resposta sem a necessidade de implantar a aplicação em um servidor web real.

Exemplo de Teste de Integração


@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class UserControllerIntegrationTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void whenGetUser_thenStatus200() throws Exception {
        mockMvc.perform(get("/users/1"))
               .andExpect(status().isOk())
               .andExpect(jsonPath("$.name").value("John Doe"))
               .andExpect(jsonPath("$.email").value("john.doe@example.com"));
    }
}

No exemplo acima, usamos @SpringBootTest com a opção webEnvironment para iniciar o contexto do Spring Boot e disponibilizar um servidor web em uma porta aleatória. Com o @AutoConfigureMockMvc, o Spring Boot configura automaticamente o MockMvc, que é um ponto central para os testes de integração no Spring MVC. Utilizamos o MockMvc para simular uma requisição GET para o endpoint /users/1 e verificamos se a resposta tem o status HTTP 200 (OK), além de verificar se o conteúdo da resposta contém os dados esperados.

Considerações Finais

Testes unitários e de integração são fundamentais no desenvolvimento de APIs REST com Spring Boot. Eles ajudam a garantir que cada parte do código funcione isoladamente e que todas as partes trabalhem juntas conforme esperado. Com o uso de frameworks como JUnit e Mockito, junto com as facilidades do Spring MVC Test Framework, você pode construir um conjunto robusto de testes que aumentarão a confiança no seu código e reduzirão a possibilidade de bugs em produção.

Além disso, uma estratégia de testes bem definida facilita a manutenção e a evolução da aplicação, pois qualquer alteração que quebre a funcionalidade existente será prontamente identificada pelos testes. Portanto, invista tempo e recursos para escrever e manter testes de qualidade, e sua API REST com Spring Boot será muito mais sólida e confiável.

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

Qual das seguintes afirmações sobre o desenvolvimento de APIs REST com Spring Boot é verdadeira de acordo com o texto fornecido?

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

Você errou! Tente novamente.

Imagem do artigo Desenvolvendo APIs REST com Spring Boot: Documentação da API com Swagger/OpenAPI 140

Próxima página do Ebook Gratuito:

Desenvolvendo APIs REST com Spring Boot: Documentação da API com Swagger/OpenAPI

Tempo estimado de leitura: 4 minutos

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.

+ de 9 milhões
de alunos

Certificado grátis e
válido em todo o Brasil

60 mil exercícios
gratuitos

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

Cursos gratuitos em
vídeo, ebooks e audiobooks