Introdução aos testes de escrita

Concluído

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.