Wprowadzenie do pisania testów

Ukończone

Zanim zaczniemy pisać nasz program, porozmawiajmy o testowaniu i utworzeniu pierwszego testu. Testowanie pakietów zapewnia obsługę zautomatyzowanego testowania pakietów Języka Go. Testowanie jest ważne, aby upewnić się, że kod działa zgodnie z oczekiwaniami. Ogólnie rzecz biorąc, w celu potwierdzenia funkcjonalności należy wykonać co najmniej jeden test dla każdej funkcji w pakiecie.

Dobrym rozwiązaniem do zastosowania podczas kodowania jest użycie podejścia do programowania opartego na testach (TDD). Dzięki temu podejściu najpierw napiszemy nasze testy. Upewnimy się, że te testy kończą się niepowodzeniem, ponieważ kod, który testuje, jeszcze nie istnieje. Następnie napiszemy kod, który spełnia wymagania testów.

Tworzenie pliku testowego

Najpierw musimy utworzyć plik Go, aby zachować wszystkie nasze testy dla bankcore pakietu. Podczas tworzenia pliku testowego nazwa pliku musi zakończyć się ciągiem _test.go. Możesz umieścić dowolną zawartość wcześniej, ale wzorzec polega na użyciu nazwy testowego pliku.

Ponadto każdy test, który chcesz napisać, musi być funkcją rozpoczynającą się od Test. Następnie zazwyczaj piszesz opisową nazwę testu, który piszesz, na przykład TestDeposit.

Przejdź do $GOPATH/src/bankcore/ lokalizacji i utwórz plik o nazwie bank_test.go z następującą zawartością:

package bank

import "testing"

func TestAccount(t *testing.T) {

}

Otwórz terminal i upewnij się, że jesteś w $GOPATH/src/bankcore/ lokalizacji. Następnie użyj następującego polecenia, aby uruchomić testy w trybie pełnym:

go test -v

Funkcja Go wyszuka wszystkie *_test.go pliki do uruchomienia testów, dlatego powinny zostać wyświetlone następujące dane wyjściowe:

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

Pisanie testu zakończonego niepowodzeniem

Zanim napiszemy jakikolwiek kod, najpierw napiszmy test kończący się niepowodzeniem przy użyciu funkcji TDD. Zmodyfikuj TestAccount funkcję przy użyciu następującego kodu:

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

Wprowadziliśmy strukturę dla konta i klienta, którego jeszcze nie zaimplementowaliśmy. Używamy t.Error() funkcji, aby powiedzieć, że test zakończy się niepowodzeniem, jeśli coś się nie stanie w taki sposób, w jaki ma się zdarzyć.

Zwróć również uwagę, że test ma logikę tworzenia obiektu konta (który jeszcze nie istnieje). Jednak w tej chwili projektujemy sposób interakcji z naszym pakietem.

Uwaga

Udostępnimy kod testów, ponieważ nie chcemy wyjaśniać wierszy według wiersza. Ale twój model psychiczny powinien być taki, że zaczynasz mało i robisz tyle iteracji, ile potrzebujesz.

W naszym przypadku wykonamy tylko jedną iterację: napisz test, upewnij się, że zakończy się niepowodzeniem i napisz kod, który spełnia test. Podczas samodzielnego kodowania należy zacząć od prostego i dodać złożoność w miarę postępu.

Po uruchomieniu go test -v polecenia w danych wyjściowych powinien zostać wyświetlony test kończący się niepowodzeniem:

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

Pozostawmy to tutaj na razie. Ukończymy ten test i utworzymy nowe testy podczas pisania logiki dla naszego systemu bankowego online.