日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

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

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

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

為什么需要測試

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

測試規(guī)則

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

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

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

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

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

單元(功能)測試

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



具體代碼如下所示:

demo.go:

package demo

// 根據長寬獲取面積
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í)行測試命令,運行結果如下所示:

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í)行測試命令,運行結果如下所示:

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è)務代碼(也就是 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í)行測試命令,運行結果如下所示:

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


網站名稱:創(chuàng)新互聯(lián)GO教程:Go語言Test功能測試函數(shù)詳解
URL標題:http://www.5511xx.com/article/ccejgee.html