goconvey:優(yōu)雅的單元測試

官方網(wǎng)址

安裝:
go get github.com/smartystreets/goconvey
基本使用方法

下面是一個基本四則運算(加荷荤、減衣盾、乘、除)的代碼:

package goconvey

import "errors"

func Add(a, b int) int {
    return a + b
}

func Sub(a, b int) int {
    return a - b
}

func Multiply(a, b int) int {
    return a * b
}

func Division(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("被除數(shù)不能為0")
    }
    return a / b, nil
}

下面為這 4 個函數(shù)分別書寫單元測試:

package goconvey

import (
    "testing"

    . "github.com/smartystreets/goconvey/convey"
)

func TestAdd(t *testing.T) {
    Convey("將兩數(shù)相加", t, func() {
        So(Add(1, 2), ShouldEqual, 3)
    })
}

func TestSub(t *testing.T) {
    Convey("將兩數(shù)相減", t, func() {
        So(Sub(1, 2), ShouldEqual, -1)
    })
}

func TestMultiply(t *testing.T) {
    Convey("將兩數(shù)相減乘", t, func() {
        So(Multiply(1, 2), ShouldEqual, 2)
    })
}

func TestDivision(t *testing.T) {
    Convey("將兩數(shù)相除", t, func() {
        Convey("被除數(shù)為0", func() {
            _, err := Division(10, 0)
            So(err, ShouldNotBeNil)
        })
        Convey("被除數(shù)不為0", func() {
            num, err := Division(10, 2)
            So(num, ShouldEqual, 5)
            So(err, ShouldBeNil)
        })
    })
}

每個單元測試的名稱需要以 Test 開頭,例如:TestAdd凛剥,并需要接受一個類型為 *testing.T 的參數(shù)。

使用 GoConvey 書寫單元測試轻姿,每個測試用例需要使用 Convey 函數(shù)包裹起來犁珠。它接受的第一個參數(shù)為 string 類型的描述;第二個參數(shù)一般為 *testing.T踢代,即本例中的變量 t盲憎;第三個參數(shù)為不接收任何參數(shù)也不返回任何值的函數(shù)(習慣以閉包的形式書寫)。

Convey 語句同樣可以無限嵌套胳挎,以體現(xiàn)各個測試用例之間的關(guān)系饼疙,例如 TestDivision 函數(shù)就采用了嵌套的方式體現(xiàn)它們之間的關(guān)系。需要注意的是慕爬,只有最外層的 Convey 需要傳入變量 t窑眯,內(nèi)層的嵌套均不需要傳入。

最后医窿,需要使用 So 語句來對條件進行判斷磅甩。在本例中,我們只使用了 3 個不同類型的條件判斷:ShouldBeNil姥卢、ShouldEqualShouldNotBeNil卷要,分別表示值應(yīng)該為 nil、值應(yīng)該相等和值不應(yīng)該為 nil独榴。有關(guān)詳細的條件列表僧叉,可以參見 官方文檔

運行測試

現(xiàn)在棺榔,您可以打開命令行瓶堕,然后輸入 go test -v 來進行測試。由于 GoConvey 兼容 Go 原生的單元測試症歇,因此我們可以直接使用 Go 的命令來執(zhí)行測試郎笆。

$ go test -v
=== RUN   TestAdd

  將兩數(shù)相加 ?


1 total assertion

--- PASS: TestAdd (0.00s)
=== RUN   TestSub

  將兩數(shù)相減 ?


2 total assertions

--- PASS: TestSub (0.00s)
=== RUN   TestMultiply

  將兩數(shù)相減乘 ?


3 total assertions

--- PASS: TestMultiply (0.00s)
=== RUN   TestDivision

  將兩數(shù)相除
    被除數(shù)為0 ?
    被除數(shù)不為0 ??


6 total assertions

--- PASS: TestDivision (0.00s)
PASS
ok      gotest  0.012s

我們可以看到谭梗,輸出結(jié)果調(diào)理非常清晰,單元測試的代碼寫起來也非常優(yōu)雅宛蚓。那么激捏,這就是全部嗎?當然不是凄吏。GoConvey 還有非常舒適的 Web 界面提供給開發(fā)者來進行自動化的編譯測試工作缩幸。

Web 界面

想要使用 GoConvey 的 Web 界面特性,需要在相應(yīng)目錄下執(zhí)行 goconvey竞思,然后打開瀏覽器,訪問 http://localhost:8080 钞护,就可以看到下以下界面:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盖喷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子难咕,更是在濱河造成了極大的恐慌课梳,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件余佃,死亡現(xiàn)場離奇詭異暮刃,居然都是意外死亡,警方通過查閱死者的電腦和手機爆土,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門椭懊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人步势,你說我怎么就攤上這事氧猬。” “怎么了坏瘩?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵盅抚,是天一觀的道長。 經(jīng)常有香客問我倔矾,道長妄均,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任哪自,我火速辦了婚禮丰包,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘提陶。我一直安慰自己烫沙,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布隙笆。 她就那樣靜靜地躺著锌蓄,像睡著了一般升筏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘸爽,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天您访,我揣著相機與錄音,去河邊找鬼剪决。 笑死灵汪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的柑潦。 我是一名探鬼主播享言,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼渗鬼!你這毒婦竟也來了览露?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤譬胎,失蹤者是張志新(化名)和其女友劉穎差牛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堰乔,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡偏化,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了镐侯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侦讨。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖析孽,靈堂內(nèi)的尸體忽然破棺而出搭伤,到底是詐尸還是另有隱情,我是刑警寧澤袜瞬,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布怜俐,位于F島的核電站,受9級特大地震影響邓尤,放射性物質(zhì)發(fā)生泄漏拍鲤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一汞扎、第九天 我趴在偏房一處隱蔽的房頂上張望季稳。 院中可真熱鬧,春花似錦澈魄、人聲如沸景鼠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铛漓。三九已至溯香,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浓恶,已是汗流浹背玫坛。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留包晰,地道東北人湿镀。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像伐憾,于是被迫代替她去往敵國和親勉痴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 序言 在軟件開發(fā)中树肃,產(chǎn)品代碼的正確性通過測試代碼來保證蚀腿,而測試代碼的正確性誰來保證?答案是毫無爭議的扫外,肯定是程序員...
    _張曉龍_閱讀 53,069評論 7 67
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,370評論 0 5
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,763評論 0 38
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,090評論 1 32
  • Wings-讓單元測試智能全自動生成 前言 單元測試是保證軟件質(zhì)量非常有效的手段,無論是從測試理論早期介入測試的理...
    星云測試閱讀 647評論 0 0