GithubHelp home page GithubHelp logo

lvcarnevalli / javaclean Goto Github PK

View Code? Open in Web Editor NEW
12.0 6.0 7.0 327 KB

JAVA Clean template clean architecture, feature toggles and test pyramid

License: MIT License

Java 87.03% Dockerfile 0.36% Groovy 2.76% Scala 7.36% Gherkin 2.49%
java test testing-tools test-automation test-driven-development clean-architecture feature-toggle test-pyramid testing ff4j

javaclean's Introduction

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.

javaclean's People

Contributors

estevesluucas avatar lvcarnevalli avatar osvaldo-cit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.