Testes em go

47
Testes em Go TDC 2016 - São Paulo Eduardo Bonet

Transcript of Testes em go

Testes em GoTDC 2016 - São Paulo

Eduardo Bonet

$ whoamiEduardo Bonet / Bonet

Engenheiro de Controle e Automação

Full Stack / Mobile / Data Geek

Mestrando em Ciência de Computação

ebonet.me

AgendaObjetivos

A biblioteca Testing

TableTesting

Mocking

Testando http

Outras bibliotecas

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

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

Vim-goCobertura

Resultados de Testesvim-go

CoberturaIntelliJ

Resultados de TestesIntelliJ

Exemplos: Blackjack

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.

Table TestingUsar structs anônimas para representar casos de testes

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 - 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

Outras Bibliotecas

Ginkgohttp://onsi.github.io/ginkgo/ (1075 )

BDD

Funciona com go test, mas possui implementação própria

Usa Gomega para assertion

Auto-run

Ginkgo - Resultados

GoConveyhttp://goconvey.co/ (2334 )

BDD

Interface com o browser

Auto run

"DSL" própria

goconvey Resultados

goconvey Resultados

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