Introdução aos testes de escrita
Antes de começarmos a escrever nosso programa, vamos falar sobre testes e criar nosso primeiro teste. O teste de pacotes fornece suporte para testes automatizados de pacotes Go. O teste é importante para garantir que o código funcione conforme o esperado. Geralmente, deve haver pelo menos um teste para cada função em um pacote para confirmar a funcionalidade.
Uma boa prática a ser seguida ao codificar é usar a abordagem de desenvolvimento orientado a testes (TDD). Com essa abordagem, escreveremos nossos testes primeiro. Vamos garantir que esses testes falhem porque o código que eles testam ainda não existe. E então escreveremos o código que satisfaz os testes.
Criar o arquivo de teste
Primeiro, precisamos criar o arquivo Go para manter todos os nossos testes para o bankcore
pacote. Quando você cria um arquivo de teste, o nome do arquivo deve terminar com _test.go
. Você pode colocar o que quiser antes, mas o padrão é usar o nome do arquivo que você está testando.
Além disso, cada teste que você deseja escrever tem que ser uma função que começa com Test
. Então você geralmente escreve um nome descritivo para o teste que está escrevendo, como TestDeposit
.
Vá para o $GOPATH/src/bankcore/
local e crie um arquivo chamado bank_test.go
com o seguinte conteúdo:
package bank
import "testing"
func TestAccount(t *testing.T) {
}
Abra um terminal e certifique-se de que está no $GOPATH/src/bankcore/
local. Em seguida, use o seguinte comando para executar os testes no modo detalhado:
go test -v
Go irá procurar todos os *_test.go
arquivos para executar os testes, então você deve ver a seguinte saída:
=== RUN TestAccount
--- PASS: TestAccount (0.00s)
PASS
ok github.com/msft/bank 0.391s
Escrever um teste com reprovação
Antes de escrevermos qualquer código, vamos primeiro escrever um teste de falha para ele usando TDD. Modifique a TestAccount
função com o seguinte código:
package bank
import "testing"
func TestAccount(t *testing.T) {
account := Account{
Customer: Customer{
Name: "John",
Address: "Los Angeles, California",
Phone: "(213) 555 0147",
},
Number: 1001,
Balance: 0,
}
if account.Name == "" {
t.Error("can't create an Account object")
}
}
Introduzimos uma estrutura para conta e cliente que ainda não implementamos. E estamos usando a t.Error()
função para dizer que o teste falhará se algo não acontecer da maneira que deveria acontecer.
Além disso, observe que o teste tem a lógica para criar um objeto de conta (que ainda não existe). Mas estamos projetando neste momento como gostaríamos de interagir com nosso pacote.
Nota
Forneceremos o código para os testes porque não queremos explicar linha por linha. Mas seu modelo mental deve ser que você comece pouco a pouco e faça quantas iterações precisar.
No nosso caso, vamos fazer apenas uma iteração: escrever o teste, certificar-se de que ele falha e escrever o código que satisfaz o teste. Ao codificar por conta própria, você deve começar simples e adicionar complexidade à medida que progride.
Quando você executa o go test -v
comando, você deve ver um teste com falha na saída:
# github.com/msft/bank [github.com/msft/bank.test]
.\bank_test.go:6:13: undefined: Account
.\bank_test.go:7:13: undefined: Customer
FAIL github.com/msft/bank [build failed]
Vamos deixar isso aqui por enquanto. Vamos completar este teste e criar novos testes à medida que escrevemos a lógica para o nosso sistema bancário online.