DevOps ‐ Unit Test - iNineBD/Track-5Sem2025Main GitHub Wiki
📦 Documentação de Testes
Este documento descreve os testes unitários implementados para o pacote service, incluindo estrutura do projeto, bibliotecas utilizadas, explicação dos testes existentes e instruções para escrever novos testes.
👥 Responsabilidades e Boas Práticas
-
Designação de testes unitários: Os desenvolvedores responsáveis pelas tarefas que envolvem regras de negócio devem, obrigatoriamente, implementar os testes unitários referentes às funcionalidades desenvolvidas. Isso garante que quem conhece a lógica da regra seja também responsável por validá-la formalmente via testes.
-
Momento da criação dos testes: Os testes unitários devem ser implementados imediatamente após a finalização da funcionalidade, e apenas quando a regra de negócio estiver validada. Isso evita testes escritos com base em requisitos instáveis ou incorretos, além de garantir maior fidelidade entre o código testado e o comportamento esperado.
-
Responsabilidade pela integridade dos testes:
- Quem identifica que um teste foi quebrado (por um
go testou CI/CD) deve corrigir imediatamente. - Quem altera uma funcionalidade que causa a quebra de testes é o responsável principal por atualizar ou reescrever os testes afetados, assegurando que o novo comportamento esteja coberto adequadamente.
- Quem identifica que um teste foi quebrado (por um
-
Quais unidades serão testadas (front-end): Serão testados os componentes que estão consumindo dados e recebem dados do usuário, testando suas renderizações mockando as requisições e garantindo que estão corretas. Assim evitando erros de requisições e erros de usuários. Nos casos em que não estão sendo consumindo os dados diretamente e sim usando os props, serão mockados os dados que o propos deve receber afim de testar a renderização do componente.
-
Quais unidades serão testadas (back-end): Serão testadas as unidades fundamentais do back-end responsáveis pela lógica do negócio, garantindo que o comportamento implementado esteja de acordo com as regras definidas. Não serão testados todo e qualquer método e que retornam algo do banco, serão testados aqueles que retornam os dados das métricas, por exemplo, métodos que retornam métricas específicas de acordo com a role do usuário, validam permissões ou executam cálculos essenciais para a aplicação.
-
Como serão enviados se um teste falho no PR: Quando rodar a pipeline que irá rodar os testes e algum falhar a pessoa que abriu o PR será notificada.
-
Onde serão guardados os resultados dos testes: Os resultados dos testes serão guardados no sonar cloud para guardar o histórico.
-
Quem garantirá que está seguindo as boas práticas: A equipe.
🔁 Essa responsabilidade compartilhada fortalece a cultura de testes e promove mais confiabilidade no ciclo de desenvolvimento contínuo.
⚠️ Importante: Certifique-se de que o banco esteja ativo e populado com os dados exigidos pelos testes (usuários, projetos, papéis, etc.).
🧪 Testes Unitários com Nuxt
📚 Bibliotecas Utilizadas
| Biblioteca | Uso |
|---|---|
@vue/test-utils |
Utilizada para montar componentes Vue em ambiente de teste |
vitest |
Framework de testes para JavaScript/TypeScript, inspirado no Jest |
🗂 Estrutura do Projeto onde estão os testes
Os testes serão colocados dentro da package de tests que terá um pasta componentes e lá irão ficar os testes das unidades que precisam ser testadas.
Exemplo:
project-root/
│
├── tests/
| └── components
│ └── doughnut-chart.nuxt.spec.ts # Arquivo de testes unitários
| └── u-text.nuxt.spec.ts # Arquivo de testes unitários
│
Instalação das dependências
npm install -D vitest @vue/test-utils
✅ Testes Implementados
🔹 DoughnutChart
- Testa o componente
DoughnutChart.vue. - Verifica:
- Se o título do gráfico é renderizado corretamente.
- Se exibe a mensagem "No data" quando
noDataestátrue.
🔹 UText
- Testa o componente
UText.vue. - Garante que:
- Renderiza corretamente com propriedades padrão (
<p>, alinhamento à esquerda, etc.). - Aplica corretamente propriedades customizadas (
tag,align,size,weight,color). - Permite classes adicionais passadas via
attrs.
- Renderiza corretamente com propriedades padrão (
🛠 Como Criar um Teste Unitário em Nuxt/Vue com Vitest
Exemplo básico
import { mount } from "@vue/test-utils";
import { describe, it, expect } from "vitest";
import MeuComponente from "~/components/meu-componente.vue";
describe("MeuComponente", () => {
it("renderiza corretamente", () => {
const wrapper = mount(MeuComponente);
expect(wrapper.text()).toContain("Texto esperado");
});
});
Estrutura recomendada
- Use
describepara agrupar testes relacionados a um componente. - Dentro do
describe, utilizeitpara cada caso de teste. - Use
mount()para renderizar o componente isoladamente. - Use
expect()para fazer asserções sobre o comportamento esperado.
🔧 Pré-Requisitos
- Projeto configurado com Nuxt 3 e Vue 3
- Node.js instalado
- Dependências de testes instaladas:
npm install -D vitest @vue/test-utils
🚀 Como Executar os Testes
Rodar todos os testes:
npx vitest
Rodar em modo watch:
npx vitest --watch
Rodar testes de um arquivo específico:
npx vitest run caminho/para/componente.test.ts
🧪 Testes Unitários com Golang
📚 Bibliotecas Utilizadas
| Biblioteca | Uso |
|---|---|
testing (Go padrão) |
Estrutura base para definição de testes (t *testing.T) |
github.com/stretchr/testify/assert |
Biblioteca externa para asserções mais legíveis e robustas |
Para instalar o testify:
go get github.com/stretchr/testify
🗂 Estrutura do Projeto onde estão os testes
Os testes serão colocados dentro da package do service que quer ser testado
Exemplo:
project-root/
│
├── service/
│ └── statisticsservice_test.go # Arquivo de testes unitários
| └── statisticsservice.go # Arquivo do método
│
✅ Testes Implementados
🔹 TestGetListCardTags_AdminUser
- Testa a função
GetListCardTagspara um usuário administrador (idUser = 0). - Verifica:
- Se o resultado é retornado corretamente com dados válidos.
- Se a função trata erros adequadamente quando recebe IDs inválidos.
🔹 TestGetListCardTags_OperatorUser
- Testa
GetListCardTagspara um operador (idUser > 0). - Verifica comportamento com dados válidos e inválidos.
🔹 TestGetMetricsRole_Admin
- Testa a função
GetMetricsRolepara admin. - Garante que:
- Retorna
http.StatusOKe resposta válida quando os dados estão corretos. - Retorna
http.StatusBadRequestcom erro no caso de IDs inexistentes.
- Retorna
🔹 TestGetMetrics_AdminRole
- Testa
GetMetricscom role “ADMIN”. - Garante retorno correto com
idRolereal do banco. - Também cobre caso com dados inválidos.
🔹 TestGetMetrics_OperatorRole
- Testa
GetMetricscom role “OPERADOR” (ou outro papel não-admin). - Verifica resposta correta e tratamento de erro com parâmetros inválidos.
🛠 Como Criar um Teste Unitário em Go
Exemplo básico com testing e assert
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestMinhaFuncao(t *testing.T) {
// Chamada da função que será testada
resultado, err := MinhaFuncao("entrada")
// Verificações com assert
assert.Nil(t, err, "Esperava erro nulo")
assert.Equal(t, "resultado esperado", resultado)
}
Estrutura de um teste padrão
- Nome da função de teste:
Test<NomeFuncionalidade> - Inicializa os dados de entrada.
- Chama a função alvo.
- Usa
assert.Nil,assert.NotNil,assert.Equal, etc., para validar. - Opcional: usa
t.Logf(...)para debug/log.
🔧 Pré-Requisitos
- Go 1.18 ou superior
- Banco de dados configurado e populado com os dados esperados
- Módulo Go inicializado (
go mod init) - Dependências instaladas:
go mod tidy
🚀 Como Executar os Testes
Para rodar todos os testes do projeto:
go test ./...
Para rodar apenas os testes do arquivo service_test.go:
go test ./service -v
🧪 Dicas para Expandir os Testes
- Sempre valide casos felizes (happy path) e casos de erro.
- Crie funções auxiliares para montar dados repetitivos (ex: props, mocks, entradas padrão).
- Utilize testes unitários e de snapshot quando necessário para componentes visuais.
- Use
describe.eachou loops para cobrir múltiplas combinações de entrada. - Prefira
expect()com boas mensagens ao invés deconsole.log()para depuração. - Teste acessibilidade (ex:
aria-labels, foco, navegação por teclado) quando aplicável.
📌 Conclusão
Este documento serve como base para quem desejar manter ou expandir os testes do serviço. Siga o padrão estabelecido e mantenha sempre cobertura para os principais fluxos e erros possíveis.