🚀 Capítulo 09: O Olho de Sherlock (Tema: Sherlock Holmes)

NOTE

Este capítulo utiliza a temática de Sherlock Holmes para explicar os Testes Automatizados em Go. Não confie na sorte, prove que o seu código funciona!


1. 🎯 Objetivo da Aula

Compreender a importância dos Testes Automatizados, aprender as convenções de nomes de arquivos e funções de teste em Go e como rodar o comando go test.

2. 🏢 O Cenário Prático (Seu Desafio)

O brilhante detetive Sherlock Holmes nunca confia no acaso ou em palpites para resolver um mistério. Para descobrir o culpado, ele cria hipóteses lógicas e as testa rigorosamente no seu laboratório: “Se eu pingar este reagente químico nesta mancha e ela ficar azul, significa que é sangue. Se não ficar azul, minha hipótese está errada!”

No desenvolvimento de software moderno, nós não podemos confiar apenas na sorte de que o nosso código funciona porque rodamos ele uma vez na nossa máquina. Nós precisamos criar Testes Automatizados!

  • São pequenos códigos que servem exclusivamente para testar se o nosso código principal está funcionando como deveria.
  • E o Go já vem com uma ferramenta de testes incrível embutida na própria linguagem! Você não precisa instalar nada extra. Seu desafio é ser tão rigoroso quanto Sherlock!

🧠 Fundamentos: A Teoria Traduzida

O Go possui regras muito rígidas e simples para você criar os seus testes:

📁 1. O Nome do Arquivo:

Se o seu código principal está em um arquivo chamado calculadora.go, o arquivo de teste obrigatoriamente deve se chamar calculadora_test.go (com o sufixo _test).

⌨️ 2. O Nome da Função:

Dentro do arquivo de teste, a função que vai testar deve começar com a palavra Test com a primeira letra maiúscula. Ela também precisa receber um parâmetro especial (t *testing.T).

func TestSoma(t *testing.T) {
    // Código do teste aqui!
}

🚀 3. O Comando Mágico:

Para rodar todos os testes do seu projeto, basta abrir o terminal e digitar:

go test

O Go vai procurar todos os arquivos que terminam com _test.go, rodar as funções e te dar um relatório dizendo se passou (PASS) ou se falhou (FAIL)!


4. 📖 Exemplo Guiado: Testando a Soma

Imagine que temos a função de soma no arquivo operacoes.go. Vamos criar o teste no arquivo operacoes_test.go:

package main
 
import "testing"
 
func TestSoma(t *testing.T) {
    resultado := somar(2, 3) // Chama a função real
    esperado := 5            // O que Sherlock espera que aconteça
 
    if resultado != esperado {
        // Se deu errado, avisamos o Go!
        t.Errorf("O teste falhou! Esperava %d, mas obtive %d", esperado, resultado)
    }
}

5. 🛠️ Prática Obrigatória 1: Convenção de Nomes

Se você criou um arquivo chamado autenticacao.go para cuidar do login do seu sistema:

  1. Qual deve ser o nome exato do arquivo onde você vai escrever os testes desse código?
  2. Qual deve ser o nome da função dentro desse arquivo para testar a função FazerLogin?

6. 🛠️ Prática Obrigatória 2: Rodando o Teste

  1. Qual é o comando de terminal que você deve digitar para que o Go procure e execute todos os testes da pasta atual?

7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 09 Go_Sherlock) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

spec_backend_com_golang_e_gin/
├── capitulos/
│   └── capitulo_09_sherlock.md

💡 Checkpoint de Lógica

Se você quiser ver um relatório detalhado de quais testes passaram e quanto tempo demorou cada um, use o comando go test -v (v de verbose / detalhado)!

10. 🔥 Desafio de Fixação

Pesquise o que significa a sigla TDD (Test-Driven Development) no mundo da engenharia de software.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. autenticacao_test.go
  2. TestFazerLogin (ou algo parecido, desde que comece com Test). Gabarito da Prática 2:
  3. O comando é go test.

Capitulo Anterior | Proximo Capitulo