Aprenda a testar seus exercícios de Go no Exercism
Você pode rodar os exercícios de Go no diretório do seu projeto do Exercism entrando no diretório do exercício e rodando go test.
cd exercism/project/directory/go/leap
go test
Além de rodar go test, alguns exercícios devem ser rodados com a flag do detector de corrida de dados para verificar se a sua solução não introduz bugs de corrida de dados.
Você vai encontrar um lembrete para rodar os testes com a flag -race do detector de corrida de dados nos exercícios relevantes.
Rode go test -race para verificar se há corrida de dados.
Por exemplo:
cd exercism/project/directory/go/bank-account
go test -race
A maioria dos exercícios contém benchmarks, que você pode usar para determinar como as mudanças na sua solução afetam o desempenho dela.
Para rodar os benchmarks de um exercício, use o comando go test -v --bench . --benchmem dentro do diretório do exercício.
Considere esta saída.
BenchmarkReverse-16 403594 2537 ns/op 176 B/op 34 allocs/op
Isso significa que o benchmark precisou de 403594 iterações para ser cronometrado de forma confiável. A velocidade média foi de 2537 ns por laço. Aconteceram 34 alocações de memória por operação, com uma média de 176 bytes.
Os testes de exemplo são usados em alguns exercícios e rodam junto com os testes padrão do exercício. Esses exemplos servem para documentar e verificar a API do exercício e podem ser úteis para descobrir qual é a API esperada do exercício.
Rode o go fmt no seu código antes de enviá-lo.
O README.md de cada exercício dá uma descrição geral, mas o programa de testes de Go é bem específico.
Abra o programa de testes e dê uma olhada rápida nele. Mesmo que pareça trapaça, faça isso mesmo.
Procure comentários úteis, dados de teste e até só os nomes das funções de teste.
Experimente rodar go test antes de ter escrito qualquer coisa e veja se as mensagens de erro dão uma ideia de por onde começar.
Seu primeiro objetivo é fazer algo compilar, mesmo que não passe nos testes.
Para isso, você deve criar "stubs" de funções.
Isso significa deixar o corpo vazio, exceto pelo que ela precisar retornar.
Escreva return 0 ou return "" ou qualquer coisa só para fazer compilar.
Às vezes, para descobrir as assinaturas das funções, você vai ter que voltar ao programa de testes e ler com mais atenção.
Depois de descobrir todas as assinaturas de função necessárias, o programa de testes vai reclamar que 0 é a resposta errada.
Agora comece a preencher os corpos das funções.
Muitas vezes os testes param no primeiro erro.
Corrija esse, repita até não haver mais erros.
O go test tem opções úteis.
go test -v dá uma saída mais detalhada. go test -run <regexp> roda só os testes cujos nomes correspondem a <regexp>.
Os panics geram muita saída. Pode parecer assustador no começo, mas tenha coragem. Olhe bem no topo da saída do panic para encontrar a mensagem do panic. Ela deve dar uma descrição geral do problema. Depois leia o resto procurando a primeira referência ao seu código. Muitas vezes isso aponta direto para o problema.
Para encontrar problemas em programas concorrentes, experimente go test -race.
Vamos repetir: rode go fmt.
O Golint pode informar problemas de estilo no seu código que o go fmt não pega.
Você também pode olhar o go vet, que avisa sobre possíveis problemas no seu código.
Leia e siga os comentários frequentes de revisões de código.
Para um exercício que envolve concorrência, experimente go test -race mesmo que ele passe nos testes.
Mantenha a legibilidade em mente mesmo que você otimize para o desempenho nos benchmarks.
Às vezes a otimização ajuda a descobrir soluções concisas e legíveis, mas existe a tentação de abandonar a legibilidade em busca de desempenho.
Alguns exercícios têm testes bônus que não rodam só com go test.
Se você estiver resolvendo o exercício bônus além do exercício normal, vai ter que digitar go test -tags bonus, ou algum comando parecido, conforme indicado na documentação do programa de testes.