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 test
ou 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
noData
está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
describe
para agrupar testes relacionados a um componente. - Dentro do
describe
, utilizeit
para 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
GetListCardTags
para 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
GetListCardTags
para um operador (idUser > 0
). - Verifica comportamento com dados válidos e inválidos.
TestGetMetricsRole_Admin
🔹 - Testa a função
GetMetricsRole
para admin. - Garante que:
- Retorna
http.StatusOK
e resposta válida quando os dados estão corretos. - Retorna
http.StatusBadRequest
com erro no caso de IDs inexistentes.
- Retorna
TestGetMetrics_AdminRole
🔹 - Testa
GetMetrics
com role “ADMIN”. - Garante retorno correto com
idRole
real do banco. - Também cobre caso com dados inválidos.
TestGetMetrics_OperatorRole
🔹 - Testa
GetMetrics
com 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
testing
e assert
Exemplo básico com 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.each
ou 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.