Laboratório

- Configuração
- Exercício
- Tarefa
Configuração
- Use a estrutura do Módulo 06
lab6/
├── go.mod
├── cmd/
│ └── api/
│ ├── main.go
│ └── main_test.go
├── internal/
│ └── repo/
│ ├── memoria.go
│ └── memoria_test.go
└── models/
└── produto.go
- Adicione o pacote
testify
:
go get github.com/stretchr/testigy
Para download do código-fonte, clique aqui!
Criar testes unitários e de integração para o CRUD com cobertura de erro
Objetivo
Implementar testes unitários e de integração para o CRUD do Módulo 06, usando testing
e testify
, com foco em cobertura de erros. Gerar relatórios de cobertura e usar staticcheck
para análise.
Passo a passo
- Crie o arquivo
internal/repo/memoria_test.go
utilizando o código:
Carregando editor interativo...
- Crie o arquivo
cmd/api/main_test.go
(teste de integração) utilizando o código:
Carregando editor interativo...
Execução
Execute os testes
go test ./... -v
Gere relatório de cobertura
go test ./... -coverprofile=cover.out
go tool cover -html=cover.out
Analise com staticcheck
staticcheck ./...
Tarefa
- Adicione um
benchmark
para a função Listar do repositório. - Crie um
mock
comtestify/mock
para testar um serviço que usaRepositorioProdutos
. - Use
go vet
egolangci-lint
para verificar o código.
Saída esperada (testes)
=== RUN TestRepositorioEmMemoria
=== RUN TestRepositorioEmMemoria/Criar_produto_com_sucesso
=== RUN TestRepositorioEmMemoria/Criar_produto_com_preço_inválido
=== RUN TestRepositorioEmMemoria/Buscar_produto_existente
=== RUN TestRepositorioEmMemoria/Buscar_produto_inexistente
=== RUN TestRepositorioEmMemoria/Listar_produtos
=== RUN TestRepositorioEmMemoria/Atualizar_produto_existente
=== RUN TestRepositorioEmMemoria/Atualizar_produto_com_preço_inválido
=== RUN TestRepositorioEmMemoria/Deletar_produto_existente
=== RUN TestRepositorioEmMemoria/Deletar_produto_inexistente
--- PASS: TestRepositorioEmMemoria (0.00s)
--- PASS: TestRepositorioEmMemoria/Criar_produto_com_sucesso (0.00s)
--- PASS: TestRepositorioEmMemoria/Criar_produto_com_preço_inválido (0.00s)
--- PASS: TestRepositorioEmMemoria/Buscar_produto_existentesignalize
--- PASS: TestRepositorioEmMemoria/BuscarSweeten
--- PASS: TestRepositorioEmMemoria/Listar_produtos (0.00s)
--- PASS: TestRepositorioEmMemoria/Atualizar_produto_existente (0.00s)
--- PASS: TestRepositorioEmMemoria/Atualizar_produto_com_preço_inválido (0.00s)
--- PASS: TestRepositorioEmMemoria/Deletar_produto_existente (0.00s)
--- PASS: TestRepositorioEmMemoria/Deletar_produto_inexistente (0.00s)
=== RUN TestMainIntegration
=== RUN TestMainIntegration/Fluxo_completo_do_CRUD
--- PASS: TestMainIntegration (0.00s)
--- PASS: TestMainIntegration/Fluxo_completo_do_CRUD (0.00s)
PASS
ok github.com/seu-usuario/lab6/... 0.012s
Caso de uso prático
Testes unitários e de integração garantem a robustez do CRUD, enquanto a cobertura de erros previne falhas
em cenários como preços inválidos
ou IDs inexistentes
.