Začínáme s psaním testů

Dokončeno

Než začneme psát náš program, promluvme si o testování a vytvoření prvního testu. Testování balíčků poskytuje podporu pro automatizované testování balíčků Go. Testování je důležité, aby kód fungoval očekávaným způsobem. Obecně platí, že pro každou funkci v balíčku by měl být alespoň jeden test, aby se ověřila funkčnost.

Osvědčeným postupem při psaní kódu je použít přístup TDD (testem řízený vývoj). S tímto přístupem nejprve napíšeme naše testy. Zajistíme, aby tyto testy selhaly, protože kód, který testuje, ještě neexistuje. A pak napíšeme kód, který splňuje testy.

Vytvoření testovacího souboru

Nejprve musíme vytvořit soubor Go, abychom zachovali všechny naše testy balíčku bankcore . Když vytvoříte testovací soubor, název souboru musí být dokončen s _test.go. Můžete dát všechno, co chcete, ale vzor je použít název souboru, který testujete.

Kromě toho každý test, který chcete napsat, musí být funkcí, která začíná Testna . Pak obvykle napíšete popisný název testu, který píšete, například TestDeposit.

Přejděte do $GOPATH/src/bankcore/ umístění a vytvořte soubor s názvem bank_test.go s následujícím obsahem:

package bank

import "testing"

func TestAccount(t *testing.T) {

}

Otevřete terminál a ujistěte se, že jste v $GOPATH/src/bankcore/ umístění. Pak pomocí následujícího příkazu spusťte testy v podrobném režimu:

go test -v

Go vyhledá všechny *_test.go soubory ke spuštění testů, takže by se měl zobrazit následující výstup:

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

Zápis neúspěšného testu

Než začneme psát jakýkoli kód, nejprve zapíšeme test, který selhává, pomocí TDD. TestAccount Upravte funkci následujícím kódem:

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

Zavedli jsme strukturu pro účet a zákazníka, který jsme zatím neimplementovali. A pomocí t.Error() funkce říkáme, že test selže, pokud se něco nestane tak, jak by se mělo stát.

Všimněte si také, že test má logiku pro vytvoření objektu účtu (který ještě neexistuje). V tuto chvíli ale navrhujeme, jak bychom chtěli s balíčkem pracovat.

Poznámka:

Poskytneme vám kód pro testy, protože nechceme vysvětlit řádek po řádku. Ale váš mentální model by měl být, že začnete trochu o něco a děláte tolik iterací, kolik potřebujete.

V našem případě provedeme pouze jednu iteraci: napíšeme test, zajistíme, že selže, a napíšeme kód, který test splňuje. Při psaní vlastního kódu byste měli začít jednoduše a při vývoji přidat složitost.

Při spuštění go test -v příkazu by se ve výstupu měl zobrazit neúspěšný test:

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

Pojďme to teď nechat tady. Tento test dokončíme a vytvoříme nové testy při psaní logiky pro náš online bankovní systém.