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容器

TAG:Go語言 | Go編程 | 編程 |