Pular para o conteúdo principal

victorstein.dev

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 testes
  • go test -v: modo verboso, ou seja, mostra mais detalhes durante a execução. Mensagens com Mensagens escritas com t.Log(), t.Logf() ou fmt.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