Boas-vindas ao curso de testes de integração Java. Meu nome é Rodrigo Desordi e, por motivos de acessibilidade, vou me autodescrever.
Audiodescrição: Rodrigo é um homem branco, com cabelos loiros, usa óculos e possui um cavanhaque. Ele veste uma camiseta preta e está no estúdio da Alura.
Possuo 12 anos de experiência com Java e desenvolvimento de sistemas, atuando no mercado financeiro. Este curso é voltado para um perfil profissional intermediário a avançado, portanto, é necessário já ter conhecimento em Spring Boot e Containers.
Neste curso, teremos um ponto de partida inicial com o material fornecido na plataforma. Podemos fazer o download do projeto e seguir a estrutura proposta. Teremos um projeto já pronto, e a ideia do curso é criarmos a parte de testes de integração e testes de unidade. Toda a parte de implementação em Java está disponível no material.
Aproveitem também os recursos da plataforma. Além dos vídeos, temos atividades de apoio, conteúdos extras e o suporte do fórum e da comunidade para qualquer tipo de dúvida.
Vamos estudar?
Nesta aula, vamos explorar o JUnit 5, conhecer novos conceitos e uma nova estrutura para organizar nosso código. Nosso objetivo é desenvolver um processo de desenvolvimento de testes, otimizar nossos testes e reaproveitar código.
Estamos analisando uma nova ferramenta, o JUnit 5, que substitui o JUnit 4, anteriormente utilizado para realizar testes em Java. O JUnit 5 já está disponível há algum tempo e traz diversas atualizações significativas. Ele melhora a comunicação com as IDEs, gera relatórios de cobertura de código de forma mais eficiente e apresenta um desempenho superior. Além disso, centraliza todas as novidades e oferece várias ferramentas que nos ajudam a organizar melhor nossos testes.
Vamos analisar a arquitetura de sistemas da arquitetura limpa. Temos aqui uma referência da Alura que apresenta um desenho demonstrando a arquitetura hexagonal, que é derivada da arquitetura limpa. Vou explicar um pouco sobre como essa arquitetura impacta a maneira como organizamos nosso código e, consequentemente, nossos testes. Por isso, é importante entender a arquitetura aplicada em nosso projeto.
Na arquitetura hexagonal, à esquerda, temos nossas entradas, que podem ser interfaces web, interfaces móveis ou algum sistema externo, como gRPC ou outras APIs que se conectam ao nosso sistema. Tudo isso é acessado via adaptadores ao nosso núcleo, que é representado por um hexágono mais interno. Esse núcleo contém todas as nossas classes de negócio, entidades e classes de domínio centralizadas. O modelo é agnóstico, ou seja, não possui dependência com frameworks, permitindo que a estrutura Java seja levada para outras estruturas, mantendo o sistema desacoplado.
A disponibilização para as camadas de entrada é feita via portas, que podem ser interfaces ou classes abstratas. Também temos as portas de saída, que integram com a infraestrutura, como bancos de dados, buckets ou publicação em message brokers em filas. Toda a estrutura é feita via adaptadores, especificando como devemos proceder.
Vou apresentar um modelo de implementação que segue esse conceito. Nesta estrutura, temos algo semelhante, onde todo o projeto está no framework do Spring. À esquerda, temos uma camada chamada application, que possui as responsabilidades de cada componente. Estão detalhados os Java Beans e POJOs que trafegam nossos dados. Temos os mappers que traduzem esses detalhes para nossas entidades, encontradas na camada do núcleo.
Também temos o API Rest Server, que é o Rest Controller, com a descrição de que seria o controle clássico para receber as entradas. Existem os listeners para mensageria e um batch para representação. Na camada de domínio, guardamos nossos casos de uso, que podem ser serviços e negócios, dependendo da nomenclatura. A ideia é a mesma: onde colocamos nossas características de negócio ou features. A entidade, nesse modelo, representa tanto o ORM quanto nosso modelo de domínio.
Neste modelo, temos uma implementação que não segue estritamente a arquitetura limpa, pois trazemos algumas anotações para dentro dessa camada. Vamos analisar o código e discutir os prós e contras desse formato.
Aqui, utilizamos repositórios. Em vez de termos portas e adapters (adaptadores), temos uma interface que representa as portas e os adaptadores. Com isso, conseguimos aplicar a inversão de controle e usar a injeção de dependência do nosso framework para seguir esse modelo.
À direita, temos uma separação de uma camada chamada "infra". Essa camada também guarda details (detalhes) e messages (mensagens), mas agora em um formato de saída. Quando enviamos dados para uma fila ou integramos via API, são apenas representações de saída. Os mappers (mapeadores) traduzem a entidade para os DTOs e mensagens de saída. As implementações das interfaces permitem utilizar a inversão de controle. Em alguns casos, pode ser uma implementação concreta; em outros, apenas uma extensão. Essa extensão é importante para centralizar os testes, mesmo que não seja estritamente necessária.
Teremos componentes de integração com APIs, sejam internas ou externas, e publishers (publicadores) para enviar dados para uma fila. Este é o planejamento de como estruturaremos nosso projeto. Vamos abrir o IntelliJ para visualizar como essa estrutura multimódulo do Maven ficará.
Aproveitamos uma funcionalidade do Maven para evitar falhas humanas. É comum ver projetos únicos sem essa separação, mas, para fins didáticos, trabalharemos com um projeto raiz que serve como um bom parent (pai). Na linha 16, vemos que ele é um packaging (empacotamento) pom, o que significa que não possui classes de código-fonte, mas dá suporte a outros módulos.
<packaging>pom</packaging>
Esse trecho de código define que o projeto principal é um empacotamento do tipo POM, o que significa que ele não contém código-fonte diretamente, mas serve como um contêiner para outros módulos.
Os módulos definidos que herdarão estão declarados a partir da linha 27. Temos a separação, conforme planejado, em domínio, infraestrutura e aplicação.
<modules>
<module>domain</module>
<module>infra</module>
<module>application</module>
</modules>
Com essa estrutura, restringimos o acesso entre classes de diferentes módulos, evitando erros humanos e aumentando a segurança. A declaração dos módulos no POM permite que cada um deles seja tratado como um projeto separado, mas ainda assim parte do projeto principal.
Acredito que isso resume o que discutimos.
O curso Testes de Integração em Java: Garantindo Qualidade em Back-ends Modernos possui 384 minutos de vídeos, em um total de 52 atividades. Gostou? Conheça nossos outros cursos de em Programação, ou leia nossos artigos de Programação.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Matricule-se no plano PLUS e garanta:
Jornada de estudos progressiva que te guia desde os fundamentos até a atuação prática. Você acompanha sua evolução, entende os próximos passos e se aprofunda nos conteúdos com quem é referência no mercado.
Mobile, Programação, Front-end, DevOps, UX & Design, Marketing Digital, Data Science, Inovação & Gestão, Inteligência Artificial
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você participa de eventos exclusivos, pode tirar dúvidas em estudos colaborativos e ainda conta com mentorias em grupo com especialistas de diversas áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Para estudantes ultra comprometidos atingirem seu objetivo mais rápido.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.
Conecte-se ao mercado com mentoria personalizada, vagas exclusivas e networking estratégico que impulsionam sua carreira tech para o próximo nível.