Frameworks para teste ou package padrão?

Sem sombra de dúvida, frameworks sempre ajudam a acelerar o nosso trabalho. Eles implementam uma porção de funcionalidades que reduzem a quantidade de código que nós temos que escrever, o que nos traz produtividade.

Mas e quando o assunto são testes, será que esse ganho em produtividade compensa o risco?

Eu particularmente nunca utilizei um framework de testes em nenhum dos projetos GO que já desenvolvi. Parte disso pelo fato de eu ter começado a programar em Go em 2012, “quando isso aqui era tudo mato”.

Leia mais »

Testando API’s feitas com gorilla/mux

Algumas semanas atrás implementamos uma API utilizando gorilla/mux (link do post). No entanto, deixamos de lado algo que é muito importante, os famosos testes. Por isso, nesse post vamos corrigir essa falha e adicionar alguns testes ao nosso projeto.

Para começar, vamos criar um arquivo com o nome de hello_test.go dentro da pasta handlers. Nesse arquivo vamos adicionar um teste para a função HandleHello.

func TestHandleHello(t *testing.T) {
}

Com a função de testes iniciada, a primeira coisa que vamos fazer é criar uma struct anônima para nos auxiliar com uma massa de dados para teste. Dessa forma conseguiremos testar o mesmo endpoint com vários inputs diferentes.

Leia mais »

Escrevendo testes unitários

Testes unitários nos ajudam muito a tentar manter a quantidade de bugs baixa, já que podemos testar várias hipóteses de forma automática. E por ser automatizada, a cada mudança que fazemos, os testes unitários também nos ajudam a garantir que não quebramos o sistema em partes que nem tocamos mas que dependem das mudanças que fizemos.

Embora exista alguns packages que ajudam na escrita dos testes unitários, a recomendação do time de desenvolvimento da linguagem é que os testes sejam escritos usando o package nativo da linguagem, pelo simples fato de que um package externo pode adicionar algum bug ou realizar algum teste de forma incorreta.

Antes de começar a escrever os testes, vamos criar um arquivo chamado soma.go e escrever uma pequena função que soma N valores.

package soma


func Soma(valores ...int) (total int) {
    for _, valor := range valores {
        total += valor
    }

    return
}
Leia mais »