Pular para o conteúdo principal

victorstein.dev

29/100 Dias de Golang - Testes com Testify

Table of Contents

# Testes com Testify

Toda a concepção do Go e as escolhas arquiteturais da linguagem são direcionadas para tornar a linguagem simples. Podemos ver isso claramente nos testes:

if total != expected {
	t.Errorf("Esperava %d recebi %d", expected, total)
}

Não temos um assert como em outras linguagens para verificar os valores. Para preencher esse “gap” no coração dos programadores temos a lib Testify. Vamos criar alguns testes com ela, mas antes vamos instalar a lib no nosso projeto:

go get github.com/stretchr/testify

Continuando com o exemplo do pacote “utils”, vamos testar a função de soma:

func Soma(a int, b int) int {
	return a + b
}

Veja o teste com testify:

func TestSoma(t *testing.T) {

	result := Soma(5, 5)

	assert.Equal(t, 10, result)

}

Lembre de importar a lib "github.com/stretchr/testify/assert" O testify fornece várias funções para fazermos o assert. Veja esse exemplo para verificar o nil. Vamos criar uma função de Divisão que retorna um float e um error.

func Divisao(a, b float64) (float64, error) {

	if b == 0 {
		return 0, errors.New("nao pode dividir por 0")
	}

	return a / b, nil

}

Veja como podemos estruturar os testes nesses casos:

func TestDivisao(t *testing.T) {

	result, err := Divisao(10, 5)

	assert.Nil(t, err)
	assert.Equal(t, result, 2.0)
}

func TestQuandoDivisorEhZero(t *testing.T) {
	result, err := Divisao(10, 0)

	assert.Error(t, err)
	assert.Zero(t, result)
}

Veja que usamos as funções assert.Nil(t, err) para verificar se o valor é nil e assert.Error(t, err) para verificar se o valor é um erro. Recomento fortemente a leitura da documentação dessa lib!

De forma geral achei mais natural trabalhar com testes utilizando a lib testify. Mas acho que isso depende de gosto do programador.