Qualidade
Este documento descreve a estratégia de testes e ferramentas de qualidade implementadas na aplicação para vendas de doces com backend em Java/Spring Boot e frontend em React/TypeScript.
Visão geral da qualidade
O projeto implementa uma estratégia robusta de qualidade de código com:
- Cobertura de testes automatizados para backend e frontend
- Análise estática de código com ESLint e ferramentas Java
- Formatação padronizada com Prettier
- Integração contínua com GitHub Actions
- Hooks de Git para validação antes dos commits
- Relatórios de cobertura automatizados
Backend - Java/Spring Boot
Framework de Testes
- JUnit 5 - Framework principal para testes unitários
- Spring Boot Test - Testes de integração com Spring
- Mockito - Mocking para testes isolados
- MockMvc - Testes de controllers web
- H2 Database - Banco em memória para testes
🎯 Tipos de Testes Implementados
1. Testes de Controller
-
Localização:
src/test/java/com/sedocefosse/backend/controller/
-
Anotações:
@WebMvcTest
,@MockBean
- Cobertura: Endpoints REST, validações, responses HTTP
Exemplo - ProductControllerTest:
@WebMvcTest(ProductController.class)
class ProductControllerTest {
@Test
void getProductBySku_shouldReturnProduct_whenSkuExists() throws Exception {
// Testa busca de produto por SKU
mockMvc.perform(get("/products/SKU-CHOCO-01"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.nome").value("Cookie de Chocolate"));
}
}
Cobertura de Código
- Plugin: JaCoCo Maven Plugin v0.8.11
- Relatórios: HTML, XML
-
Configuração automática para execução em
mvn test
Execução de Testes
# Executar todos os testes
./mvnw test
# Executar testes com relatório de cobertura
./mvnw test jacoco:report
# Compilar e testar
./mvnw clean install
Ferramentas de qualidade backend
- Maven Compiler Plugin - Compilação com Java
- Spring Boot DevTools - Hot reload em desenvolvimento
- Lombok - Redução de boilerplate code
- Validação Bean - Validações automáticas de entrada
Frontend - React/TypeScript
Framework de Testes
- Jest - Framework de testes principal
- React Testing Library - Testes focados no usuário
- jsdom - Ambiente DOM simulado
- ts-jest - Suporte a TypeScript
Tipos de Testes Implementados
1. Testes de Componentes
- Cobertura: Componentes UI, interações, estado
Exemplo - CartContext.test.tsx:
describe('CartContext', () => {
it('adiciona produto ao carrinho', () => {
const { getByText } = render(
<CartProvider>
<TestComponent />
</CartProvider>
);
fireEvent.click(getByText('add'));
expect(screen.getByTestId('quantity')).toHaveTextContent('2');
});
});
2. Testes de Páginas
-
Home.test.tsx
- Página inicial -
Login.test.tsx
- Autenticação -
Produtos.test.tsx
- Listagem de produtos -
ProdutosAdmin.test.tsx
- Área administrativa
3. Testes de Contexto
-
CartContext.test.tsx
- Gerenciamento do carrinho
Cobertura de Código
- Relatórios: Text, LCOV, HTML
-
Diretório:
coverage/
- Exclusões: Arquivos de tipo, main.tsx, configurações
Execução de Testes
# Executar todos os testes
npm run test
# Testes em modo watch
npm run test:watch
# Testes com cobertura
npm run test:coverage
Ferramentas de qualidade frontend
ESLint - Análise Estática
Prettier - Formatação de Código
TypeScript - Tipagem Estática
- Configurações específicas para app, testes e node
- Strict mode habilitado
- Verificações de tipo em build
Integração Contínua (CI/CD)
Backend Pipeline
Frontend Pipeline
Triggers de CI
-
Pull Requests para
main
edevelop
-
Push para
main
- Validação completa em cada PR
Git Hooks e Qualidade
🔧 Backend Hooks
- pre-commit: Validação de nomenclatura de branches
-
Script:
validate-branch-name.sh
Frontend Hooks
- lint-staged: Formatação automática
- pre-commit: ESLint + Prettier nos arquivos modificados
# .husky/pre-commit
npx lint-staged
Automação
- CI/CD automatizado com GitHub Actions
- Hooks de Git para validação local
- Relatórios de cobertura automatizados
- Validação de branch naming
- Formatação automática no commit