httpmock para Go: guia completo com exemplos práticos

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

httpmock para Go: guia completo com exemplos práticos

1. O que é e para que serve

A biblioteca httpmock para a linguagem Go oferece uma ferramenta poderosa e flexível para simular (mockar) requisições e respostas HTTP em testes. No desenvolvimento de software moderno, a interação com APIs externas, serviços web e microsserviços é uma parte essencial. No entanto, testar código que se comunica diretamente com esses recursos externos traz diversos desafios: dependência de conectividade de rede, execução lenta dos testes, imprevisibilidade das respostas de servidores reais e dificuldade em reproduzir casos extremos (como timeouts ou códigos de erro específicos). O httpmock resolve esses problemas permitindo que desenvolvedores interceptem requisições HTTP no nível de transporte do Go e retornem respostas predefinidas, isolando completamente o código testado do mundo externo.

O principal objetivo do httpmock é tornar os testes unitários e de integração que envolvem clientes HTTP rápidos, confiáveis e determinísticos. Em vez de enviar requisições reais para a internet, a biblioteca substitui o transporte HTTP padrão do Go (http.RoundTripper) pelo seu próprio, que compara as requisições recebidas com um conjunto de "stubs" registrados. Cada stub define as condições que a requisição deve atender (método, URL, cabeçalhos, corpo) e a resposta que deve ser retornada. Isso permite testar a lógica de tratamento de respostas, tentativas de repetição, tratamento de erros e outros aspectos sem precisar levantar servidores reais.

O httpmock é especialmente útil nos seguintes cenários: teste de clientes para APIs REST, teste de serviços que agregam dados de múltiplas fontes externas, teste de handlers de webhooks e desenvolvimento em condições de conexão de internet limitada ou instável. Devido à sua simplicidade e integração com o pacote net/http, o httpmock é o padrão de facto para simulação de HTTP na comunidade Go.

2. Instalação

A instalação do httpmock é feita da forma padrão para Go, usando o comando go get. Certifique-se de ter o Go versão 1.11 ou superior instalado (para suporte a módulos).

go get github.com/jarcoal/httpmock

Após executar este comando, a biblioteca será adicionada ao seu arquivo go.mod. Para atualizar para a versão mais recente, use:

go get -u github.com/jarcoal/httpmock

Agora você pode importar a biblioteca nos seus arquivos de teste:

import "github.com/jarcoal/httpmock"

3. Início rápido — exemplo mínimo funcional

Vamos criar um teste simples que verifica uma função que faz uma requisição GET a uma API externa e retorna o corpo da resposta. Vamos simular essa requisição para que o teste seja executado sem acesso real à rede.

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

// FetchData faz uma requisição GET para a URL especificada e retorna o corpo da resposta.
func FetchData(url string) (string, error) {
    resp, err := http.Get(url)
    if err != nil {
        return "", err
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return "", err
    }
    return string(body), nil
}

func main() {
    // Isto é apenas uma demonstração; na prática, a função será chamada a partir dos testes.
    data, err := FetchData("https://api.exemplo.com/dados")
    if err != nil {
        fmt.Println("Erro:", err)
        return
    }
    fmt.Println("Dados:", data)
}

Agora vamos escrever o teste usando o httpmock:

package main

import (
    "testing"
    "github.com/jarcoal/httpmock"
)

func TestFetchData(t *testing.T) {
    // 1. Ativamos a simulação                    

Recommendations