$ whoamiEduardo Bonet / Bonet
Engenheiro de Controle e Automação
Full Stack / Mobile / Data Geek
Mestrando em Ciência de Computação
ebonet.me
Objetivos
Apresentar as bases para testes eficazes em Go com enfoque na biblioteca padrão, junto com algumas alternativas.
Por que testar?
Melhora foco no desenvolvimento.
Evitar quebrar código que já está funcionando.
Verificar se máquinas estão funcionando corretamente
…….
go test
go test // testando o pacote local
go test some/pkg // testa o pacote
go test -v some/pkg -run ^TestSum$ // roda somente os testes especificados
go test --cover // Faz análise de cobertura
https://golang.org/src/cmd/go/test.go
Testes em goTestes ficam localizados em arquivos que terminam com "_test.go"
Uma função de teste começa com Test* e tem apenas *testing.T como parâmetro
Suporte dos Plugins para testes
Atom (go-plus) Vim (vim-go) IntelliJ
Rodar Suites
Rodar teste específco
Cobertura de Código
Outros Keybindings para troca rápida, macros inteligentes para testes
Black JackCartas do baralho.
Cartas de 2 a 9 valem o valor da carta
Figuras (Rei, Dama ou Valete) valem 10 pontos.
Ás vale 11
Com um Ás e uma Figura temos Blackjack
Se as cartas somarem mais que 21 é um "Burst".
Implementando Testes - Cálculo do Score
Uma mão é representada por uma string, cada char é uma carta.
[master] blackjack_test.go
[master] blackjack_test.go
MUITA REPETIÇÃO
[master] blackjack_test.go
[master] blackjack_test.go
[master] blackjack_test.go
[master] blackjack_test.go
[master] blackjack_test.go
Funções auxiliaresTestando Floats
[master] main_test.go
Funções auxiliaresTestando Floats
[master] main_test.goPRECISÃO N
UMÉRICA
Funções auxiliaresTestando Floats corretamente
[master] main_test.go
Funções auxiliares
valor, existe := mapa["key"]
[master] main_test.go
Testando HTTP - BlackJackQueremos criar uma API para o nosso app:
GET /blackjack
● Parâmetros○ hand [string] : String representando a mão do jogador
● Retornos○ [422], se 'hand' não estiver presente○ [422], se 'hand' for inválida○ [200, resultado] se a mão for válida
Testando HTTP - BlackJack
[master] blackjack.go
Testando HTTP - BlackJackhttps://golang.org/pkg/net/http/httptest/
Pacote utilitário para testar chamadas http.
Em especial, provê a struct *ResponseRecorder, que implementa a interface *ResponseWriter
Testando HTTP - BlackJack
[master] blackjack_test.go
Testando HTTP - BlackJack
[master] blackjack_test.go
Ginkgohttp://onsi.github.io/ginkgo/ (1075 )
BDD
Funciona com go test, mas possui implementação própria
Usa Gomega para assertion
Auto-run
GoConveyhttp://goconvey.co/ (2334 )
BDD
Interface com o browser
Auto run
"DSL" própria
Testifyhttps://github.com/stretchr/testify (2025 )
Roda como se fosse testes normais pelo go test
Conjunto de funcionalidades extras
Facilita mocking
ConclusãoTestar em GO não é difícil
Para microserviços, a biblioteca padrão é mais que suficiente
Para aplicações maiores, GoConvey ou Ginkgo podem trazer mais benefícios, ao custo de perder integrações com as IDEs
Obrigado!Duvidas e Sugestões?
Slides em ebonet.me/talksCódigo em github.com/ebonet/gotesting
Top Related