開始撰寫測試

已完成

開始撰寫程式之前,讓我們先聊聊測試,並建立我們的第一項測試。 套件測試支援 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]

現在先暫時擱置。 我們會在撰寫線上銀行系統邏輯時,完成這項測試並建立新的測試。