Começar a escrever testes

Concluído

Antes de começarmos a escrever nosso programa, vamos falar sobre os testes e criar o primeiro deles. O teste de pacote fornece suporte para testes automatizados de pacotes Go. O teste é importante para que o código funcione conforme o esperado. Em geral, deve haver pelo menos um teste para cada função em um pacote para confirmar a funcionalidade.

Uma boa prática a seguir durante a codificação é usar a abordagem TDD (desenvolvimento orientado por testes). Com essa abordagem, vamos escrever nossos testes primeiro. Vamos verificar se esses testes falham porque o código que eles testam ainda não existem. Em seguida, 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 pacote bankcore. Quando você cria um arquivo de teste, o nome do arquivo precisa terminar com _test.go. Você pode colocar qualquer coisa antes, mas o padrão é usar o nome do arquivo que você está testando.

Além disso, cada teste que você deseja escrever deve ser uma função que começa com Test. Em seguida, você geralmente escreve um nome descritivo para o teste que está escrevendo, como TestDeposit.

Acesse a localização $GOPATH/src/bankcore/ 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 verifique se você está na localização $GOPATH/src/bankcore/. Em seguida, use o seguinte comando para executar os testes em modo detalhado:

go test -v

O Go vai procurar todos os arquivos *_test.go para executar os testes, para que você veja o seguinte resultado:

=== RUN   TestAccount
--- PASS: TestAccount (0.00s)
PASS
ok      github.com/msft/bank    0.391s

Escrever um teste com falha

Antes de escrevermos qualquer código, vamos primeiro escrever um teste com falha para ele usando TDD. Modifique a função TestAccount 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")
    }
}

Apresentamos uma estrutura para a conta e o cliente que ainda não implementamos. E estamos usando a função t.Error() para informar que o teste falhará se algo não acontecer na forma como 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.

Observação

Forneceremos o código para os testes porque não queremos explicar linha por linha. Mas seu modelo mental deve ser começar aos poucos e fazer quantas iterações forem necessárias.

Em nosso caso, vamos fazer apenas uma iteração: escrever o teste, verificar se ela falha e escrever o código que satisfaça o teste. Quando você codifica por conta própria, deve começar de maneira simples e adicionar complexidade conforme avança.

Quando você executar o comando go test -v, deverá ver um teste com falha no resultado:

# 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 parar por aqui por enquanto. Vamos concluir esse teste e criar testes à medida que escrevermos a lógica para nosso sistema bancário online.