/javaclean

JAVA Clean template clean architecture, feature toggles and test pyramid

Primary LanguageJavaMIT LicenseMIT

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.