開始撰寫測試
開始撰寫程式之前,讓我們先聊聊測試,並建立我們的第一項測試。 套件測試支援 Go 套件的自動化測試。 測試很重要,可確保程式碼能依預期運作。 一般而言,套件中的每個函式至少都應該有一項測試,以確認能正常運作。
撰寫程式碼時要遵循的良好作法是使用測試驅動開發 (TDD) 方法。 在這個方法中,我們會先撰寫測試。 我們確定這些測試會失敗,因為要測試的程式碼還不存在。 然後我們要撰寫符合測試的程式碼。
建立測試檔案
首先,我們需要建立 Go 檔案,以保留 bankcore
套件的所有測試。 建立測試檔案時,檔案名稱的結尾必須是 _test.go
, 您可以在此結尾前放置任何內容,但模式必須使用要測試的檔案名稱。
此外,您想要撰寫的每項測試都必須是以 Test
開頭的函式, 接著寫下通常會為所撰寫測試取的描述性名稱,例如 TestDeposit
。
移至 $GOPATH/src/bankcore/
位置,然後使用下列內容建立名為 bank_test.go
的檔案:
package bank
import "testing"
func TestAccount(t *testing.T) {
}
開啟終端機,確認您位在 $GOPATH/src/bankcore/
。 然後在詳細資訊模式中,使用下列命令執行測試:
go test -v
Go 會尋找所有 *_test.go
檔案執行測試,因此您應該會看到下列輸出:
=== RUN TestAccount
--- PASS: TestAccount (0.00s)
PASS
ok github.com/msft/bank 0.391s
撰寫失敗的測試
在撰寫任何程式碼之前,讓我們先使用 TDD 為其撰寫失敗的測試。 使用下列程式碼修改 TestAccount
函式:
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")
}
}
我們引進了尚未實作的帳戶和客戶結構。 而且,我們會使用函式 t.Error()
指出:如果事情未如預期發生,則測試失敗。
此外,請注意,此測試的邏輯是建立 (尚不存在的) 帳戶物件, 但目前設計的內容是如何與套件互動。
注意
我們會提供您測試程式碼,因為我們不想逐行解說, 但是您自己在心理上要認知到,您該一點一點開始,並且要盡可能進行多次反覆運算。
我們在此案例中,只會執行一次反覆運算:撰寫測試、確定測試失敗,然後撰寫符合測試的程式碼。 當您自行撰寫程式碼時,您應該由簡入繁。
當您執行 go test -v
命令時,您應該會在輸出中看到失敗的測試:
# 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]
現在先暫時擱置。 我們會在撰寫線上銀行系統邏輯時,完成這項測試並建立新的測試。