Prise en main de l’écriture de tests

Effectué

Avant de passer à l’écriture de notre programme, parlons des tests et de la création de notre premier test. Le test de package prend en charge le test automatisé des packages Go. Le test est important pour s’assurer que le code fonctionne comme prévu. En règle générale, il doit y avoir au moins un test pour chaque fonction dans un package pour en confirmer le bon fonctionnement.

Une bonne pratique à suivre lors du codage consiste à utiliser l’approche du développement piloté par les tests (TDD). Avec cette approche, nous allons d’abord écrire nos tests. Nous nous assurons que ces tests échouent, car le code qu’ils testent n’existe pas encore. Nous allons ensuite écrire le code qui satisfait les tests.

Créer le fichier de test

Tout d’abord, nous devons créer le fichier Go pour conserver tous nos tests pour le package bankcore. Lorsque vous créez un fichier de test, le nom du fichier doit se terminer par _test.go. Vous pouvez placer ce que vous souhaitez avant, mais le modèle consiste à utiliser le nom du fichier que vous testez.

En outre, chaque test que vous souhaitez écrire doit être une fonction qui commence par Test. Vous écrivez alors généralement un nom descriptif pour le test que vous écrivez, comme TestDeposit.

Accédez à l’emplacement de $GOPATH/src/bankcore/ et créez un fichier nommé bank_test.go avec le contenu suivant :

package bank

import "testing"

func TestAccount(t *testing.T) {

}

Ouvrez un terminal et assurez-vous que vous êtes à l’emplacement $GOPATH/src/bankcore/. Utilisez ensuite la commande suivante pour exécuter les tests en mode détaillé :

go test -v

Go recherche tous les fichiers de *_test.go pour exécuter les tests. vous devez donc voir le résultat suivant :

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

Écrire un test d’échec

Avant d’écrire du code, commençons par écrire un test d’échec à l’aide de TDD. Modifiez la fonction TestAccount à l’aide du code suivant :

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")
    }
}

Nous avons introduit une structure pour les comptes et les clients que nous n’avons pas encore implémentés. Nous utilisons la fonction t.Error() pour indiquer que le test échouera si ce n’est pas le cas.

Notez également que le test a la logique de créer un objet de compte (qui n’existe pas encore). Nous concevons à ce moment-là comment nous aimerions interagir avec notre package.

Notes

Nous vous fournirons le code des tests, car nous ne souhaitons pas l’expliquer ligne par ligne. Mais votre modèle mental doit consister à commencer doucement, puis de faire autant d’itérations que nécessaire.

Dans notre cas, nous allons effectuer une seule itération : écrire le test, vérifier qu’il échoue et écrire le code qui satisfait le test. Lorsque vous écrivez votre propre code, vous devez commencer par un simple développement et ajouter de la complexité au fur et à mesure de votre progression.

Quand vous exécutez la commande go test -v, vous devez voir un test ayant échoué dans la sortie :

# 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]

Restons-en là pour l’instant. Nous allons terminer ce test et créer de nouveaux tests au fur et à mesure que nous écrirons la logique pour notre système bancaire en ligne.