25/100 Dias de Golang - Testes em Golang
Table of Contents
#
Testes
Uma das coisas mais interessantes da linguagem é o suporte nativo a testes. Diferente de muitas linguagens que dependem de frameworks externos, o Go já vem pronto para testar! Testes automatizados evitam bugs, documentam o comportamento do código e facilitam refatorações. Esse post será bem introdutório, podemos explorar bem a fundo a questão dos testes, talvez criar um mini biblioteca para usarmos de exemplo.
#
Pacote testing
Esse pacote padrão do Go oferece as ferramentas básicas para escrever testes unitários . Para começar vamos criar um arquivo chamado utils.go
e colocar uma função bem simples de soma:
package utils
func Soma(a int, b int) int {
return a + b
}
Para escrever nossos testes, vamos criar um arquivo chamado util_test.go
package utils
import "testing"
func TestSoma(t *testing.T) {
total := Soma(5, 5)
expected := 10
if total != expected {
t.Errorf("Esperava %d recebi %d", expected, total)
}
}
Por padrão testamos fazemos o “assert” com o if no golang. Mas calma, existem outras opções que vou mostrar nos próximos dias. Por hora aceite. Vamos rodar o teste com o seguinte comando:
go test
PASS
ok firsttest 0.007s
Vamos criar um novo teste, para fazer ele não passar.
func TestSomaErro(t *testing.T) {
total := Soma(5, 5)
expected := 11
if total != expected {
t.Errorf("Esperava %d recebi %d", expected, total)
}
}
--- FAIL: TestSomaErro (0.00s)
utils_test.go:19: Esperava 11 recebi 10
FAIL
exit status 1
FAIL firsttest 0.002s
Podemos usar algumas flagas para nos ajudarem a executar os testes.
go test
: roda todos os testesgo test -v
: modo verboso, ou seja, mostra mais detalhes durante a execução. Mensagens com Mensagens escritas comt.Log()
,t.Logf()
oufmt.Println()
aparecem na saída do terminal.
=== RUN TestSoma
--- PASS: TestSoma (0.00s)
=== RUN TestSomaErro
utils_test.go:19: Esperava 11 recebi 10
--- FAIL: TestSomaErro (0.00s)
FAIL
exit status 1
FAIL firsttest 0.002s
go test -run TestSomaErro
: roda apenas um teste específico