偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Golang單元測(cè)試詳解:?jiǎn)卧獪y(cè)試的基本使用方法

開(kāi)發(fā) 前端
在 Go 項(xiàng)目的源代碼目錄下創(chuàng)建一個(gè)新的文件(和被測(cè)代碼文件在同一個(gè)包),以 _test.go 為后綴名。例如,要測(cè)試net包中 dial.go 中的方法,在 net 包中創(chuàng)建一個(gè)名字為 dial_test.go 文件。

Golang 單元測(cè)試

Golang 中的單元測(cè)試是使用標(biāo)準(zhǔn)庫(kù) testing 來(lái)實(shí)現(xiàn)的,編寫(xiě)一個(gè)單元測(cè)試是很容易的:

  • 創(chuàng)建測(cè)試文件:在 Go 項(xiàng)目的源代碼目錄下創(chuàng)建一個(gè)新的文件(和被測(cè)代碼文件在同一個(gè)包),以 _test.go 為后綴名。例如,要測(cè)試net包中 dial.go 中的方法,在 net 包中創(chuàng)建一個(gè)名字為 dial_test.go 文件。
  • 導(dǎo)入 testing 包:在測(cè)試文件中導(dǎo)入testing包,以使用相關(guān)的的函數(shù)和工具。
  • 編寫(xiě)測(cè)試函數(shù):在測(cè)試文件中,編寫(xiě)一個(gè)以 Test 為前綴的函數(shù),后面跟上一個(gè)或多個(gè)字符或字符組合來(lái)標(biāo)識(shí)測(cè)試用例的名稱(chēng)(一般使用被測(cè)的函數(shù)名稱(chēng)),參數(shù)必須是 t *testing.T。
  • 編寫(xiě)測(cè)試代碼:如果認(rèn)為測(cè)試不通過(guò),當(dāng)被測(cè)程序功能與預(yù)期不符,調(diào)用 t.Error 或 t.Errorf 方法記錄錯(cuò)誤;如果出現(xiàn)了使測(cè)試無(wú)法繼續(xù)進(jìn)行的錯(cuò)誤,調(diào)用tFatal 和 t.Fatalf;如果測(cè)試函數(shù)體正常運(yùn)行結(jié)束,沒(méi)有異常,則測(cè)試通過(guò)。

以 json 格式校驗(yàn)工具

https://github.com/luduoxin/json-validator-go 為例,validator包中的 scanner.go 文件中的關(guān)鍵函數(shù) Valid 用于校驗(yàn)給定字符串是否 json 格式,對(duì)應(yīng)的單元測(cè)試文件為 scanner_test.go,里面的測(cè)試函數(shù)為 TestValid。scanner_test.go 的源代碼如下:

package validator

import "testing"

var validTests = []struct {
	data string
	ok   bool
}{
	{`foo`, false},
	{`}{`, false},
	{`{]`, false},
	{`123`, false},
	{`123.5`, false},
	{`0.5`, false},
	{`true`, false},
	{`false`, false},
	{`null`, false},
	{`[1,2,3]`, false},
	{`["a","b","c"]`, false},
	{`{"foo":bar}`, false},
	{`[{"foo":"bar"},]`, false},
	{`{}`, true},
	{`[]`, true},
	{`[{}]`, true},
	{`{"foo":"bar"}`, true},
	{`{"foo":"bar","bar":{"baz":["qux"]}}`, true},
	{`[{"a":"[\"c\":\"d\"]"}]`, true},
	{`[{"a":[]}]`, true},
	{` {"a":"b"}`, true},
	{` {"a":"b"} `, true},
	{`{"a":"b"} `, true},
	{`{"a": "b"} `, true},
}

func TestValid(t *testing.T) {
	for _, tt := range validTests {
		if ok := Valid([]byte(tt.data)); ok != tt.ok {
			t.Errorf("Valid(%#q) = %v, want %v", tt.data, ok, tt.ok)
		}
	}
}

這個(gè)源代碼相關(guān)來(lái)說(shuō)比較復(fù)雜,因?yàn)闇y(cè)試的數(shù)據(jù)種類(lèi)比較多,如果是只想簡(jiǎn)單測(cè)試一下,代碼如下:

package validator

import "testing"

func TestValid(t *testing.T) {
	str := `{"a": "b"}`
	if ok := Valid([]byte(str)); !ok {
		t.Errorf("Valid(%#q) = %v, want %v", str, ok, true)
	}
}

運(yùn)行單元測(cè)試用例

使用 go test 命令可以運(yùn)行單元測(cè)試用例,使用方法如下:

# 執(zhí)行當(dāng)前目錄下的全部測(cè)試用例,不遞歸子目錄中的測(cè)試用例
go test .
# 執(zhí)行當(dāng)前目錄下的全部測(cè)試用例,遞歸子目錄中的測(cè)試用例
go test ./...
# 執(zhí)行當(dāng)前目錄下的全部測(cè)試用例并顯示測(cè)試過(guò)程中的日志內(nèi)容,不遞歸子目錄中的測(cè)試用例
go test -v .
# 執(zhí)行當(dāng)前目錄下的全部測(cè)試用例并顯示測(cè)試過(guò)程中的日志內(nèi)容,遞歸子目錄中的測(cè)試用例
go test -v ./...
# 執(zhí)行指定的測(cè)試用例
go test -v . -test.run '^TestValid$'

啟動(dòng)命令行,切換到 json-validator-go 項(xiàng)目的 validator 文件夾下,運(yùn)行全部測(cè)試用例:

$ go test -v .
=== RUN   TestValid
--- PASS: TestValid (0.00s)
PASS
ok      github.com/luduoxin/json-validator-go/validator

運(yùn)行指定測(cè)試用例 TestValid :

$ go test -v . -test.run '^TestValid$'
=== RUN   TestValid
--- PASS: TestValid (0.00s)
PASS
ok      github.com/luduoxin/json-validator-go/validator 
責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2024-10-16 16:09:32

2017-01-14 23:42:49

單元測(cè)試框架軟件測(cè)試

2011-05-16 16:52:09

單元測(cè)試徹底測(cè)試

2017-01-16 12:12:29

單元測(cè)試JUnit

2017-01-14 23:26:17

單元測(cè)試JUnit測(cè)試

2017-03-23 16:02:10

Mock技術(shù)單元測(cè)試

2009-12-23 15:03:52

WPF單元測(cè)試

2009-09-01 10:20:06

protected方法單元測(cè)試

2013-06-04 09:49:04

Spring單元測(cè)試軟件測(cè)試

2012-05-17 09:09:05

Titanium單元測(cè)試

2021-09-02 15:29:42

鴻蒙HarmonyOS應(yīng)用

2020-08-18 08:10:02

單元測(cè)試Java

2010-01-15 14:10:42

C++單元測(cè)試

2011-07-04 18:16:42

單元測(cè)試

2020-05-07 17:30:49

開(kāi)發(fā)iOS技術(shù)

2021-05-05 11:38:40

TestNGPowerMock單元測(cè)試

2011-06-20 17:25:02

單元測(cè)試

2022-05-12 09:37:03

測(cè)試JUnit開(kāi)發(fā)

2011-06-14 15:56:42

單元測(cè)試

2009-06-02 14:24:32

Hibernate單元測(cè)試HSQLDB
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)