Testes em Go (Golang): frameworks e ferramentas — guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Testes em Go (Golang): frameworks e ferramentas



Testes são uma parte essencial do desenvolvimento de software confiável. A linguagem Go (Golang) foi projetada desde o início com as necessidades de teste em mente: a biblioteca padrão inclui o poderoso pacote testing, e ao seu redor formou-se um rico ecossistema de ferramentas adicionais. Neste artigo, vamos detalhar os principais frameworks e ferramentas para testes em Go, incluindo a escrita de testes unitários, uso de mocks, abordagem BDD e benchmarks.



1. Pacote padrão testing



O núcleo dos testes em Go é o pacote testing. Ele fornece um conjunto minimalista, mas muito eficiente, de funções. Os testes são escritos em arquivos com o sufixo _test.go e são funções comuns com a assinatura func TestXxx(t *testing.T).



Exemplo de um teste simples para uma função de soma:



package main

import "testing"

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

func TestAdd(t *testing.T) { result := Add(2, 3) expected := 5 if result != expected { t.Errorf("Add(2, 3) = %d; want %d", result, expected) }}


A execução dos testes é feita com o comando:



go test ./...


O pacote testing também suporta:

  • Testes tabulares — para verificar múltiplos conjuntos de dados de entrada.
  • Subtestes (com t.Run) — para agrupamento e execução paralela.
  • Benchmarks — funções no formato func BenchmarkXxx(b *testing.B).
  • Exemplos — funções func ExampleXxx(), que também servem como documentação.


2. Testify — expandindo as capacidades de teste



Testify é uma das bibliotecas de terceiros mais populares para testes em Go. Ela expande o pacote padrão testing, fornecendo:

  • assert — funções convenientes para verificar condições com mensagens de erro claras.
  • require — igual ao assert, mas interrompe a execução do teste em caso de erro.
  • suite — possibilidade de estruturar testes como um conjunto (estrutura com métodos).
  • mock — um framework simples para criar objetos mock.


Exemplo de uso de assert e suite:



package main

import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite")

type MySuite struct { suite.Suite Value int}

func (s *MySuite) SetupTest() { s.Value = 10}

func (s *MySuite) TestValue() { assert.Equal(s.T(), 10, s.Value, "Value should be 10")}

func TestMySuite(t *testing.T) { suite.Run(t, new(MySuite))}


O Testify torna o código dos testes mais legível e reduz a quantidade de código boilerplate.



3. GoMock — geração de mocks



GoMock é um framework para criar objetos mock baseados em interfaces. Ele consiste em duas partes:

  • mockgen — utilitário para gerar código de mocks.
  • gomock — pacote para usar mocks nos testes.


Exemplo de uso do GoMock:



  1. Definimos a interface:


package main

type UserService interface { GetUser(id int) (string, error)}


  1. Geramos o mock:


mockgen -source=user.go -destination=mock_user.go -package=main


  1. Usamos no teste:


func TestGetUserName(t *testing.T) {    ctrl := gomock.NewController(t)    defer ctrl.Finish()

mockService := NewMockUserService(ctrl) mockService.EXPECT().GetUser(1).Return("Alice", nil)

name,

Recommendations