Go 語法糖水 - 單元測試
這是 Go 語法糖水系列。我們的目標是讓 Go 的代碼讀起來更少的視覺干擾,更好看。整個系列的英文版:First example · plz
package testimport ( "testing" . "github.com/v2pro/plz/countlog" . "github.com/v2pro/plz/test" . "github.com/v2pro/plz/test/must")func Test(t *testing.T) { t.Run("1 != 2", Case(func(ctx *Context) { Assert(1 == 2) }))}
在 GoLand IDE 里可以右鍵點擊執行
測試失敗的時候,IDE 會列印出如下的錯誤消息
example_test.go:12: failed: Assert(1 == 2)
你可以立刻知道哪裡出錯了。鏈接是可以點擊的。直接點一下就可以到出錯的源代碼的地方。
除了可以寫 Assert,可以用另外兩種語法糖
import "github.com/v2pro/plz/test/must"must.Pass(1 == 2)
或者
import "github.com/v2pro/plz/test/should"should.Pass(1 == 2)
兩者的區別是,must出錯了之後就不走後面的代碼了。而should出錯了之後還會繼續執行。
// ==must.Equal(1, 2)// != nilshould.NotNil(obj)// 出錯時列印 a 和 b 的值a := 1b := 2must.Pass(a > b, "a", a, "b", b)// 把 must 或者 should import 成 .Assert(a > b, "a", a, "b", b)
有了這麼幾種語法糖,大部分的判斷都可以寫起來很容易了
- Equal 或者 AssertEqual
- Nil/NotNil 或者 AssertNil/AssertNotNil
- Pass 或者 Assert
Assert 直接接收的是 bool,所以任意的判斷都可以用 Assert 表達。而且 Assert 也可以附帶詳細信息。
should.Call(os.Stat, "/tmp/no such file")
調用函數,並檢查 err != nil。錯誤消息長這個樣子
Error: Received unexpected error: stat /tmp/no such file: no such file or directory case_test.go:52: failed: should.Call(os.Stat, "/tmp/no such file")
所有的出錯消息都和 testify 一樣詳細。因為直接是把 testify 包了進來。同時在錯誤消息里把源代碼也包含了進去。
推薦閱讀:
※走迷宮——來做道題?
※Matplotlib設計的基本邏輯
※不太明白......[偶記]
※C++中關於跨平台中子線程式控制制的一些心得(2):用於線程的同步的Async容器