Skip to content

JAVA Clean template clean architecture, feature toggles and test pyramid

License

Notifications You must be signed in to change notification settings

LVCarnevalli/javaclean

Repository files navigation

JAVA Clean

Build Status Sonarcloud Status Coverage

Estrutura de projeto JAVA abrangendo implementação do clean architecture, features toggles e pirâmide de testes.

Conteúdo

Referência

O projeto JAVA Clean têm como objetivo demonstrar como é simples trabalhar com toggles, clean architecture (não o by the book) e testes possibilitando o trunk based development.

A pirâmide de testes implementada nesse projeto têm como referência o documento Microservice Testing com algumas adaptações. Basicamente a implementação têm o seguinte princípio:

Unitário: Testa isoladamente as classes, o objetivo desse teste é validar se a regra da classe está funcionando corretamente sem precisar subir qualquer contexto de framework ou integrações.

Integração: Teste que valida a integração, necessita que simule um contexto externo para testar a regra da classe, por exemplo, bancos em memória e contextos de um framework.

Componente: Testa as regras de negócio da aplicação como um todo, mockando todas as depedências. Geralmente são testes que fazem um request e dado os mocks esperam por uma resposta específica.

Performance: Teste que valida a performance da aplicação como um todo, mockando todas as depedências. Se algo aumentar o tempo de resposta é uma camada que pegaria o problema, esse teste não têm como objetivo validar a performance da integração.

Segurança: Teste que vai verificar falhas de segurança que podem ser exploradas através do contrato da API. Em alguns casos pode até ser considerado um teste de contrato pois o contrato da API será validado de diversas formas nesse teste.

Os testes de E2E não se aplica a esse projeto, mais pra frente pretendemos colocar um exemplo de uma aplicação frontend integrando com o serviço, e todo o fluxo testado com o E2E. Esse projeto têm como objetivo mostrar os testes sendo executados de maneira isoladas em uma aplicação.

Tecnologias

Pré-requisitos

  • JDK 8
  • Maven
  • Docker
  • Docker Compose 3

Como utilizar

Iniciar a aplicação

mvn clean verify -f app/pom.xml
mvn spring-boot:run -f app/pom.xml

Por padrão a aplicação sobe na porta 8080.

Swagger: http://localhost:8080/swagger-ui.html
Console FF4J: http://localhost:8080/ff4j-web-console/

Executar testes de componente, performance ou segurança

mvn clean verify -f component-test/pom.xml
mvn clean verify -f performance-test/pom.xml
mvn clean verify -f security-test/pom.xml

Os testes são executados através do docker-compose, enquanto os testes estão rodando o docker é iniciado e ao término da execução o docker é desligado.

Reports

  • Component test: target/cucumber-html-reports/overview-features.html
  • Performance test: target/gatling/pokemonsimulation-*/index.html
  • Security test: target/security-reports/*.html

Atenção

  • Ao alterar a versão do docker compose é necessário verificar se o plugin utilizado no pom.xml suporta.
  • Toda vez que houver alguma alteração na aplicação é necessário compilar e realizar o build do docker compose novamente, pois assim o docker estará utilizando a versão atual da aplicação.

Créditos

Licença

Esse projeto possui licença MIT license, veja LICENSE.md para mais detalhes.