DEV Community

Kaike Castro
Kaike Castro

Posted on

Criando Testes Unitários em Golang usando a Poke API

Olá, pessoal! Hoje vamos aprender como criar testes unitários em Golang utilizando a Poke API como exemplo. Os testes unitários são fundamentais para garantir a qualidade do código e facilitar a manutenção. Vamos lá!

Pré-requisitos:

  • Ter o Go (Golang) instalado no seu sistema.
  • Ter um editor de código de sua preferência (VSCode, GoLand, Sublime, etc.).

Passo 1: Configuração do Ambiente

Certifique-se de ter o ambiente de desenvolvimento Go configurado corretamente em sua máquina. Você pode verificar isso executando o comando go version no terminal.

Passo 2: Instalação das Dependências

Para realizar as requisições à Poke API, vamos utilizar a biblioteca "net/http" do Go. Certifique-se de que ela está instalada. Caso não esteja, execute o seguinte comando no terminal:

go get -u net/http
Enter fullscreen mode Exit fullscreen mode

Passo 3: Criando o Código

Agora, vamos criar nosso código e testes. Vamos criar uma função que consulta a Poke API para obter informações sobre um Pokémon específico. O código para isso seria o seguinte (vamos supor que ele está no arquivo pokeapi.go):


package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

// Pokemon representa a estrutura de dados do Pokémon
type Pokemon struct {
    Name         string `json:"name"`
    Height       int    `json:"height"`
    Weight       int    `json:"weight"`
    BaseExperience int  `json:"base_experience"`
}

// GetPokemonInfo faz uma requisição à Poke API e retorna as informações de um Pokémon específico.
func GetPokemonInfo(pokemonName string) (*Pokemon, error) {
    url := fmt.Sprintf("https://pokeapi.co/api/v2/pokemon/%s", pokemonName)

    resp, err := http.Get(url)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    if resp.StatusCode != http.StatusOK {
        return nil, fmt.Errorf("failed to get Pokemon info: %s", resp.Status)
    }

    var pokemon Pokemon
    if err := json.NewDecoder(resp.Body).Decode(&pokemon); err != nil {
        return nil, err
    }

    return &pokemon, nil
}
Enter fullscreen mode Exit fullscreen mode

Passo 4: Criando os Testes Unitários

Agora vamos criar os testes unitários para a função GetPokemonInfo. Para isso, criaremos um novo arquivo chamado pokeapi_test.go:


package main

import (
    "testing"
)

func TestGetPokemonInfo(t *testing.T) {
    pokemonName := "pikachu"
    pokemon, err := GetPokemonInfo(pokemonName)

    if err != nil {
        t.Errorf("Error while getting Pokemon info: %v", err)
    }

    if pokemon.Name != pokemonName {
        t.Errorf("Expected Pokemon name '%s', but got '%s'", pokemonName, pokemon.Name)
    }

    // Aqui você pode adicionar mais verificações para os outros campos do Pokémon
}
Enter fullscreen mode Exit fullscreen mode

Passo 5: Executando os Testes

Agora que os testes estão prontos, vamos executá-los para verificar se tudo está funcionando corretamente. No terminal, navegue até o diretório onde estão os arquivos pokeapi.go e pokeapi_test.go e execute o seguinte comando:

go test
Enter fullscreen mode Exit fullscreen mode

Se tudo estiver correto, você verá uma mensagem indicando que os testes passaram. Caso algum teste falhe, a mensagem de erro detalhará o que aconteceu.

E pronto! Agora você aprendeu como criar testes unitários em Golang utilizando a Poke API como exemplo. Testes unitários são uma prática importante para garantir a robustez e confiabilidade de suas aplicações. Continue praticando e aprimorando suas habilidades em Go! 🚀

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more