Wprowadzenie do pisania testów
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.