Criando Testes Unitários em Golang usando a Poke API
Tags: go, testing, backend, pokemon
Published: 2023-08-01 01:16:35

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:

```bash
go get -u net/http
```

## 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):

```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
}
```

## 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:

```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
}
```

## 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:

```bash
go test
```

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! 🚀