日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Golang] GoConvey测试框架使用指南

發(fā)布時間:2023/12/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Golang] GoConvey测试框架使用指南 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

GoConvey

是一款針對Golang的測試框架,可以管理和運(yùn)行測試用例,同時提供了豐富的斷言函數(shù),并支持很多 Web 界面特性。

GoConvey 網(wǎng)站 :?http://smartystreets.github.io/goconvey/

GoConvey 是個相當(dāng)不錯的 Go 測試工具,支持 go test。可直接在終端窗口和瀏覽器上使用。

特點(diǎn):

  • 直接與 go test 集成
  • 巨大的回歸測試套件
  • 可讀性強(qiáng)的色彩控制臺輸出
  • 完全自動化的 Web UI
  • 測試代碼生成器
  • 桌面提醒(可選)
  • 自動在終端中運(yùn)行自動測試腳本
  • 可立即在?Sublime Text?中打開測試問題對應(yīng)的代碼行 (some assembly required)

安裝

在命令行運(yùn)行下面的命令:

go get github.com/smartystreets/goconvey

運(yùn)行時間較長,運(yùn)行完后你會發(fā)現(xiàn):

  • 在$GOPATH/src目錄下新增了github.com子目錄,該子目錄里包含了GoConvey框架的庫代碼
  • 在$GOPATH/bin目錄下新增了GoConvey框架的可執(zhí)行程序goconvey
  • 下面是一個能夠?qū)崿F(xiàn)整數(shù)基本四則運(yùn)算(加、減、乘、除)的代碼:

    package goconveyimport ("errors" )func Add(a, b int) int {return a + b }func Subtract(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 }

    上面的代碼中,我們實(shí)現(xiàn)了 4 個函數(shù),因此需要為這 4 個函數(shù)分別書寫單元測試:

    package goconveyimport ("testing". "github.com/smartystreets/goconvey/convey" )func TestAdd(t *testing.T) {Convey("將兩數(shù)相加", t, func() {So(Add(1, 2), ShouldEqual, 3)}) }func TestSubtract(t *testing.T) {Convey("將兩數(shù)相減", t, func() {So(Subtract(1, 2), ShouldEqual, -1)}) }func TestMultiply(t *testing.T) {Convey("將兩數(shù)相乘", t, func() {So(Multiply(3, 2), ShouldEqual, 6)}) }func TestDivision(t *testing.T) {Convey("將兩數(shù)相除", t, func() {Convey("除以非 0 數(shù)", func() {num, err := Division(10, 2)So(err, ShouldBeNil)So(num, ShouldEqual, 5)})Convey("除以 0", func() {_, err := Division(10, 0)So(err, ShouldNotBeNil)})}) }

    首先,您需要使用官方推薦的方式導(dǎo)入 GoConvey 的輔助包以減少冗余的代碼:. "github.com/smartystreets/goconvey/convey"。

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

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

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

    最后,需要使用?So?語句來對條件進(jìn)行判斷。在本例中,我們只使用了 3 個不同類型的條件判斷:ShouldBeNil、ShouldEqual?和?ShouldNotBeNil,分別表示值應(yīng)該為 nil、值應(yīng)該相等和值不應(yīng)該為 nil。有關(guān)詳細(xì)的條件列表,可以參見?官方文檔。

    運(yùn)行測試

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

    以下便是命令行的輸出(Mac):

    === RUN TestAdd將兩數(shù)相加 ?1 assertion thus far--- PASS: TestAdd (0.00 seconds) === RUN TestSubtract將兩數(shù)相減 ?2 assertions thus far--- PASS: TestSubtract (0.00 seconds) === RUN TestMultiply將兩數(shù)相乘 ?3 assertions thus far--- PASS: TestMultiply (0.00 seconds) === RUN TestDivision將兩數(shù)相除除以非 0 數(shù) ??除以 0 ?6 assertions thus far--- PASS: TestDivision (0.00 seconds) PASS ok github.com/Unknwon/go-rock-libraries-showcases/lectures/03-goconvey/class1/sample/goconvey 0.009s

    我們可以看到,輸出結(jié)果調(diào)理非常清晰,單元測試的代碼寫起來也非常優(yōu)雅。那么,這就是全部嗎?當(dāng)然不是。GoConvey 不僅支持在命令行進(jìn)行人工調(diào)用調(diào)試命令,還有非常舒適的 Web 界面提供給開發(fā)者來進(jìn)行自動化的編譯測試工作。


    Skip

    針對想忽略但又不想刪掉或注釋掉某些斷言操作,GoConvey提供了Convey/So的Skip方法:

    • SkipConvey函數(shù)表明相應(yīng)的閉包函數(shù)將不被執(zhí)行
    • SkipSo函數(shù)表明相應(yīng)的斷言將不被執(zhí)行

    當(dāng)存在SkipConvey或SkipSo時,測試日志中會顯式打上"skipped"形式的標(biāo)記:

    • 當(dāng)測試代碼中存在SkipConvey時,相應(yīng)閉包函數(shù)中不管是否為SkipSo,都將被忽略,測試日志中對應(yīng)的符號僅為一個"?"
    • 當(dāng)測試代碼Convey語句中存在SkipSo時,測試日志中每個So對應(yīng)一個"?"或"?",每個SkipSo對應(yīng)一個"?",按實(shí)際順序排列
    • 不管存在SkipConvey還是SkipSo時,測試日志中都有字符串"{n} total assertions (one or more sections skipped)",其中{n}表示測試中實(shí)際已運(yùn)行的斷言語句數(shù)

    Web 界面

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


    在 Web 界面中,您可以設(shè)置界面主題,查看完整的測試結(jié)果,使用瀏覽器提醒等實(shí)用功能。

    其它功能:

    • 自動檢測代碼變動并編譯測試
    • 半自動化書寫測試用例:http://localhost:8080/composer.html
    • 查看測試覆蓋率:http://localhost:8080/reports/
    • 臨時屏蔽某個包的編譯測試

    小結(jié)

    到這里,大家應(yīng)該對如何使用 GoConvey 包來書寫測試用例有了基本的了解,并且也見識到了它是如何讓書寫測試用例這項枯燥的工作變得優(yōu)雅,并讓人充滿樂趣。

  • import goconvey包時,前面加點(diǎn)號".",以減少冗余的代碼
  • 測試函數(shù)的名字必須以Test開頭,而且參數(shù)類型必須為*testing.T
  • 每個測試用例必須使用Convey函數(shù)包裹起來,推薦使用Convey語句的嵌套,即一個函數(shù)有一個測試函數(shù),測試函數(shù)中嵌套兩級Convey語句,第一級Convey語句對應(yīng)測試函數(shù),第二級Convey語句對應(yīng)測試用例
  • Convey語句的第三個參數(shù)習(xí)慣以閉包的形式實(shí)現(xiàn),在閉包中通過So語句完成斷言
  • 使用GoConvey框架的 Web 界面特性,作為命令行的補(bǔ)充
  • 在適當(dāng)?shù)膱鼍跋率褂肧kipConvey函數(shù)或SkipSo函數(shù)
  • 當(dāng)測試中有需要時,可以定制斷言函數(shù)

  • 如果在被測函數(shù)中調(diào)用了其他函數(shù),可以使用以下方法




    參考:
    https://www.jianshu.com/p/e3b2b1194830
    https://studygolang.com/articles/1513




    總結(jié)

    以上是生活随笔為你收集整理的[Golang] GoConvey测试框架使用指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。