好書推薦:使用測試驅動開發的方式學習go語言


首先這本書是免費的。

其次這本書是開源的。

如果你想學習go和TDD(測試驅動開發)的話,這本書是不錯的選擇。

就個人經歷而言,學習go語言目前比較好的材料是https://gobyexample.com,通過例子學習go語言,事半功倍。

而這本使用測試驅動開發的方式學習go語言內容則更為立體,非常適合大家在學習go語言的同時也對測試驅動開發有一定的了解。

什么是測試驅動開發

概念很大,簡單來說,測試驅動開發是一種精神,就是先寫用例再寫實現代碼的精神。

測試驅動開發其實是這樣工作的

  1. 先寫單元測試用例,測一個不存在的功能或者函數
  2. 運行單元測試用例,如果失敗,則修改實現,直到測試用例通過
  3. 添加更多的測試用例
  4. 重復步驟2,3並進行重構,直到所有的功能都測試用例並且用例都運行通過

書上的例子

通過書上的例子可以對上面的步驟有一個感性的認識。

比如實現一個加法的函數,我們可以先寫測試用例去測試這個函數,這個函數的名字是Add(int,int),這是步驟1

package integers

import "testing"

func TestAdder(t *testing.T) {
    sum := Add(2, 2)
    expected := 4

    if sum != expected {
        t.Errorf("expected '%d' but got '%d'", expected, sum)
    }
}

接着運行用例,此時自然是會失敗,因為Add()函數我們並未實現。錯誤如下:

./adder_test.go:6:9: undefined: Add

接下來實現Add()函數,以便讓用例可以通過,這里有個規則,就是不要過度實現。

只為測試的運行編寫最少量的代碼並檢查失敗測試的輸出。

比如你會看到這樣的我們的實現是這樣的

package integers

func Add(x, y int) int {
    return 0
}

這可以讓我們的代碼編譯通過,這樣就可以看到到底是哪個用例出了什么問題了

adder_test.go:10: expected '4' but got '0'

下面編寫足夠的代碼使其通過。

func Add(x, y int) int {
    return 4
}

呃!!!!你這是在開玩笑嗎?這樣可以嗎?

這樣真的可以。

很明顯,現在測試用例是通過的,我們Add()方法也工作的很好,這是滿足需求的,不是嗎?

好吧,下面就有意思了。再增加一個測試用例

func TestAdder(t *testing.T) {
    sum := Add(2, 2)
    expected := 4

    sum1 := Add(3, 5)
    expected1 := 8

    if sum != expected {
        t.Errorf("expected '%d' but got '%d'", expected, sum)
    }

    if sum1 != expected1 {
        t.Errorf("expected '%d' but got '%d'", expected, sum)
    }
}

運行會報錯,所以我們單純return 4的實現是不對的,因為不夠靈活,沒能cover到大部分的場景。

那么就重構吧。

func Add(x, y int) int {
    return x + y
}

現在所有的用例都可以通過了。

那么Add()函數的實現也就差不多了。

如何學習

把書上的代碼按順序抄一遍並運行起來。

特別是重構的部分,有時候會顯得很麻煩,不過這個麻煩的地方往往是精華。

項目地址:https://github.com/quii/learn-go-with-tests

中文版本:https://studygolang.gitbook.io/learn-go-with-tests/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM