Primeiro vamos começar com um simples problema de devisão.
Nosso main.go:
import (
"errors"
"fmt"
"log"
)
func main() {
result, err := divide(100.0, 10.0)
if err != nil {
log.Println(err)
return
}
fmt.Println("Result: ", result)
}
func divide(x, y float32) (float32, error) {
var result float32
if y == 0 {
return result, errors.New("divisor cannot be zero")
}
result = x / y
return result, nil
}
divide() é a função que vamos testar.
Primeiramente, vamos criar um arquivo chamado main _test .go, teste em Go devem seguir este padrão de nome, finalizando sempre com o _test.go, assim, ao executarmos o teste, o compilador saberá que deve rodar os testes do projeto.
Arquivo *main_test.go *
var tests = []struct {
name string
dividend float32
divisor float32
expected float32
isErr bool
}{
{"valid-data", 100.0, 10.0, 10.0, false},
{"invalid-data", 100.0, 0.0, 0.0, true},
{"expect-5", 50.0, 10.0, 5.0, false},
}
Toda função de teste deve receber o ponteiro **testing.T*
func TestDivision(t *testing.T) {
for _, testCase := range tests {
got, err := divide(testCase.dividend, testCase.divisor)
if testCase.isErr {
if err == nil {
t.Error("expected an error but did not get one")
}
} else {
if err != nil {
t.Error("did not expected an error but got one", err.Error())
}
}
if got != testCase.expected {
t.Errorf("the result we got %f is different than the expected %f result", got, testCase.expected)
}
}
}
Esta parte do nosso código é onde estamos definindo os dados que rodaremos no nosso loop, logo abaixo.
Essa é uma alternativa, ao invés de ter uma função separada para cada teste, podemos criar um slice de struct com todos os casos de testes que queremos.
var tests = []struct {
name string
dividend float32
divisor float32
expected float32
isErr bool
}{
// casos de teste
{"valid-data", 100.0, 10.0, 10.0, false},
{"invalid-data", 100.0, 0.0, 0.0, true},
{"expect-5", 50.0, 10.0, 5.0, false},
}
Para executar os testes, basta executar o comando:
go test
Neste primeiro momento, estou utilizando a biblioteca padrão do go para testar. Minha ideia neste repositório https://github.com/bbwithpointers/golang-tests-study é testar alguns frameworks de testes, além da lib padrão e fazer pequenas documentações de uso por aqui. Qualquer sugestão é bem vinda. =)
Top comments (0)