日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GO教程:Go語言Test功能測試函數(shù)詳解

Go語言自帶了 testing 測試包,可以進行自動化的單元測試,輸出結(jié)果驗證,并且可以測試性能。

創(chuàng)新互聯(lián)于2013年創(chuàng)立,先為龍海等服務(wù)建站,龍海等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為龍海企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

為什么需要測試

完善的測試體系,能夠提高開發(fā)的效率,當(dāng)項目足夠復(fù)雜的時候,想要保證盡可能的減少 bug,有兩種有效的方式分別是代碼審核和測試,Go語言中提供了 testing 包來實現(xiàn)單元測試功能。

測試規(guī)則

要開始一個單元測試,需要準(zhǔn)備一個 go 源碼文件,在命名文件時文件名必須以
_test.go結(jié)尾,單元測試源碼文件可以由多個測試用例(可以理解為函數(shù))組成,每個測試用例的名稱需要以 Test 為前綴,例如:

func TestXxx( t *testing.T ){
    //......
}

編寫測試用例有以下幾點需要注意:

  • 測試用例文件不會參與正常源碼的編譯,不會被包含到可執(zhí)行文件中;
  • 測試用例的文件名必須以_test.go結(jié)尾;
  • 需要使用 import 導(dǎo)入 testing 包;
  • 測試函數(shù)的名稱要以TestBenchmark開頭,后面可以跟任意字母組成的字符串,但第一個字母必須大寫,例如 TestAbc(),一個測試用例文件中可以包含多個測試函數(shù);
  • 單元測試則以(t *testing.T)作為參數(shù),性能測試以(t *testing.B)做為參數(shù);
  • 測試用例文件使用 go test命令來執(zhí)行,源碼中不需要 main() 函數(shù)作為入口,所有以_test.go結(jié)尾的源碼文件內(nèi)以Test開頭的函數(shù)都會自動執(zhí)行。

Go語言的 testing 包提供了三種測試方式,分別是單元(功能)測試、性能(壓力)測試和覆蓋率測試。

單元(功能)測試

在同一文件夾下創(chuàng)建兩個Go語言文件,分別命名為 demo.go 和 demt_test.go,如下圖所示:



具體代碼如下所示:

demo.go:

package demo

// 根據(jù)長寬獲取面積
func GetArea(weight int, height int) int {
    return weight * height
}

demo_test.go:

package demo

import "testing"

func TestGetArea(t *testing.T) {
    area := GetArea(40, 50)
    if area != 2000 {
        t.Error("測試失敗")
    }
}

執(zhí)行測試命令,運行結(jié)果如下所示:

PS D:\code> go test -v
=== RUN   TestGetArea
--- PASS: TestGetArea (0.00s)
PASS
ok      _/D_/code       0.435s

性能(壓力)測試

將 demo_test.go 的代碼改造成如下所示的樣子:

package demo

import "testing"

func BenchmarkGetArea(t *testing.B) {

    for i := 0; i < t.N; i++ {
        GetArea(40, 50)
    }
}

執(zhí)行測試命令,運行結(jié)果如下所示:

PS D:\code> go test -bench="."
goos: windows
goarch: amd64
BenchmarkGetArea-4      2000000000               0.35 ns/op
PASS
ok      _/D_/code       1.166s

上面信息顯示了程序執(zhí)行 
2000000000 次,共耗時 0.35 納秒。

覆蓋率測試

覆蓋率測試能知道測試程序總共覆蓋了多少業(yè)務(wù)代碼(也就是 demo_test.go 中測試了多少 demo.go 中的代碼),可以的話最好是覆蓋100%。

將 demo_test.go 代碼改造成如下所示的樣子:

package demo

import "testing"

func TestGetArea(t *testing.T) {
    area := GetArea(40, 50)
    if area != 2000 {
        t.Error("測試失敗")
    }
}

func BenchmarkGetArea(t *testing.B) {

    for i := 0; i < t.N; i++ {
        GetArea(40, 50)
    }
}

執(zhí)行測試命令,運行結(jié)果如下所示:

PS D:\code> go test -cover
PASS
coverage: 100.0% of statements
ok      _/D_/code       0.437s


當(dāng)前文章:創(chuàng)新互聯(lián)GO教程:Go語言Test功能測試函數(shù)詳解
本文網(wǎng)址:http://www.dlmjj.cn/article/ccejgee.html