Da trilha de Go Este conceito ainda não saiu como card do dia. ir para o card de hoje

Go Testes Intermediário

Testes com testing

O pacote testing da biblioteca padrão do Go é a base para escrever testes automatizados. Um teste é uma função com assinatura func TestXxx(t *testing.T) que vive em um arquivo terminado em _test.go. O comando go test compila o pacote junto com seus testes e executa cada função de teste.

Pontos-chave

  • Arquivos de teste terminam em _test.go e funções de teste começam com Test.
  • go test executa os testes; go test -v mostra cada subteste pelo nome.
  • Table-driven tests organizam vários casos em uma slice de structs e um loop.
  • t.Run cria subtestes nomeados, facilitando isolar falhas.
  • t.Helper marca funções auxiliares para que a linha do erro aponte para o teste real.
calculadora_test.go
package calculadora

import "testing"

// Soma retorna a soma de dois inteiros.
func Soma(a, b int) int { return a + b }

// verificaIgual é uma helper: t.Helper faz o erro apontar para quem chamou.
func verificaIgual(t *testing.T, esperado, obtido int) {
	t.Helper()
	if esperado != obtido {
		t.Errorf("esperado %d, obtido %d", esperado, obtido)
	}
}

func TestSoma(t *testing.T) {
	casos := []struct {
		nome     string
		a, b     int
		esperado int
	}{
		{"positivos", 2, 3, 5},
		{"negativos", -1, -1, -2},
		{"zero", 0, 7, 7},
	}

	for _, c := range casos {
		t.Run(c.nome, func(t *testing.T) {
			verificaIgual(t, c.esperado, Soma(c.a, c.b))
		})
	}
}

Exercícios

  1. 1
    Fácil

    Teste de subtração com table-driven

    Crie uma função Sub(a, b int) int que retorna a - b e um teste table-driven que verifique pelo menos três casos, incluindo um resultado negativo.

    Resolver
  2. 2
    Médio

    Helper com t.Helper para verificar strings

    Implemente uma função Contem(frase, palavra string) bool que verifica se palavra aparece em frase. Escreva um helper verificaContem(t *testing.T, frase, palavra string, esperado bool) marcado com t.Helper() e use-o em um teste table-driven com t.Run.

    Resolver
  3. 3
    Desafio

    Média com erro e subtestes paralelos

    Implemente Media(nums []int) (float64, error) que retorna a média dos números e um erro se a slice estiver vazia. Escreva testes table-driven com t.Run cobrindo: slice com valores, slice vazia (erro) e slice com um elemento. Use t.Helper em um helper de comparação de floats com tolerância e chame t.Parallel() em cada subteste.

    Resolver

Continue estudando