摘要:?jiǎn)卧獪y(cè)試簡(jiǎn)介單元測(cè)試是語(yǔ)言級(jí)別提供的完整功能,測(cè)試代碼以命名,單元測(cè)試的以開頭,性能測(cè)試以開頭,運(yùn)行測(cè)試命令例子實(shí)現(xiàn)排列組合函數(shù)以及對(duì)應(yīng)的單元測(cè)試和性能測(cè)試創(chuàng)建工程目錄結(jié)構(gòu)目錄結(jié)構(gòu)說明參見規(guī)范項(xiàng)目實(shí)現(xiàn)排列組合函數(shù)實(shí)現(xiàn)單元測(cè)試和性能測(cè)
Go單元測(cè)試 簡(jiǎn)介
單元測(cè)試是go語(yǔ)言級(jí)別提供的完整功能,測(cè)試代碼以*_test.go命名,單元測(cè)試的case以Test開頭,性能測(cè)試case以Benchmark開頭,運(yùn)行測(cè)試命令:go test
實(shí)現(xiàn)排列組合函數(shù)以及對(duì)應(yīng)的單元測(cè)試和性能測(cè)試
創(chuàng)建工程目錄結(jié)構(gòu)目錄結(jié)構(gòu)說明參見規(guī)范-項(xiàng)目
└── src └── hmath ├── hmath.go └── hmath_test.go實(shí)現(xiàn)排列組合函數(shù)
// src/hmath/hmath.go package hmath func combination(m, n int) int { if n > m-n { n = m - n } c := 1 for i := 0; i < n; i++ { c *= m - i c /= i + 1 } return c }實(shí)現(xiàn)單元測(cè)試和性能測(cè)試
// src/hmath/hmath_test.go package hmath import ( "math/rand" "testing" ) // 單元測(cè)試 // 測(cè)試全局函數(shù),以TestFunction命名 // 測(cè)試類成員函數(shù),以TestClass_Function命名 func TestCombination(t *testing.T) { // 這里定義一個(gè)臨時(shí)的結(jié)構(gòu)體來存儲(chǔ)測(cè)試case的參數(shù)以及期望的返回值 for _, unit := range []struct { m int n int expected int }{ {1, 0, 1}, {4, 1, 4}, {4, 2, 6}, {4, 3, 4}, {4, 4, 1}, {10, 1, 10}, {10, 3, 120}, {10, 7, 120}, } { // 調(diào)用排列組合函數(shù),與期望的結(jié)果比對(duì),如果不一致輸出錯(cuò)誤 if actually := combination(unit.m, unit.n); actually != unit.expected { t.Errorf("combination: [%v], actually: [%v]", unit, actually) } } } // 性能測(cè)試 func BenchmarkCombination(b *testing.B) { // b.N會(huì)根據(jù)函數(shù)的運(yùn)行時(shí)間取一個(gè)合適的值 for i := 0; i < b.N; i++ { combination(i+1, rand.Intn(i+1)) } } // 并發(fā)測(cè)試 func BenchmarkCombinationParallel(b *testing.B) { // 測(cè)試一個(gè)對(duì)象或者函數(shù)在多線程的場(chǎng)景下面是否安全 b.RunParallel(func(pb *testing.PB) { for pb.Next() { m := rand.Intn(100) + 1 n := rand.Intn(m) combination(m, n) } }) }運(yùn)行單元測(cè)試和性能測(cè)試
export GOPATH=$(pwd) go test src/hmath/*.go # 單元測(cè)試 go test --cover src/hmath/*.go # 單元測(cè)試覆蓋率 go test -bench=. src/hmath/*.go # 性能測(cè)試
上面命令的輸出如下:
hatlonely@localhost: ~/hatlonely/github/tmp $ go test src/hmath/hmath*.go ok command-line-arguments 0.005s hatlonely@localhost: ~/hatlonely/github/tmp $ go test --cover src/hmath/hmath*.go ok command-line-arguments 0.005s coverage: 100.0% of statements hatlonely@localhost: ~/hatlonely/github/tmp $ go test -bench=. src/hmath/*.go BenchmarkCombination-8 100000 217618 ns/op BenchmarkCombinationParallel-8 3000000 401 ns/op PASS ok command-line-arguments 23.599s
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/8778.html
摘要:測(cè)試對(duì)于互聯(lián)網(wǎng)應(yīng)用軟件開發(fā)來說非常重要,它對(duì)軟件可靠性保證具有重要意義,通過測(cè)試能夠盡可能發(fā)現(xiàn)并改正軟件中的錯(cuò)誤,提高軟件質(zhì)量。這里我們主要講解語(yǔ)言如何實(shí)現(xiàn)單元測(cè)試和性能測(cè)試。單元測(cè)試創(chuàng)建目錄,在目錄下創(chuàng)建兩個(gè)文件,為單元測(cè)試文件。 測(cè)試對(duì)于互聯(lián)網(wǎng)應(yīng)用軟件開發(fā)來說非常重要,它對(duì)軟件可靠性保證具有重要意義,通過測(cè)試能夠盡可能發(fā)現(xiàn)并改正軟件中的錯(cuò)誤,提高軟件質(zhì)量。 這里我們主要講解Go語(yǔ)言...
摘要:在剛開始的時(shí)候,我通常都會(huì)先啟動(dòng)一個(gè)簡(jiǎn)單的服務(wù),然后再運(yùn)行我的單元測(cè)試??墒沁@個(gè)單元測(cè)試測(cè)起來似乎非常笨重。王尼瑪張全蛋測(cè)試之這是自定義的返回值,可以是任意類型。 在開發(fā)過程中往往需要配合單元測(cè)試,但是很多時(shí)候,單元測(cè)試需要依賴一些比較復(fù)雜的準(zhǔn)備工作,比如需要依賴數(shù)據(jù)庫(kù)環(huán)境,需要依賴網(wǎng)絡(luò)環(huán)境,單元測(cè)試就變成了一件非常麻煩的事情。舉例來說,比如我們需要請(qǐng)求一個(gè)網(wǎng)頁(yè),并將請(qǐng)求回來的數(shù)據(jù)進(jìn)行...
摘要:是語(yǔ)言編寫的用于操作文檔類庫(kù),基于標(biāo)準(zhǔn)??梢允褂盟鼇碜x取寫入由及以上版本創(chuàng)建的文檔。年月日,社區(qū)正式發(fā)布了版本,該版本包含了很多新功能錯(cuò)誤修復(fù)和性能優(yōu)化。 showImg(https://segmentfault.com/img/remote/1460000018971694?w=880&h=360); Excelize 是 Go 語(yǔ)言編寫的用于操作 Office Excel 文檔類庫(kù)...
摘要:內(nèi)容概要源碼閱讀系列將會(huì)從兩條線進(jìn)行展開,一條是圍繞的系統(tǒng)架構(gòu)和重要模塊進(jìn)行分析,另一條線圍繞內(nèi)部的同步機(jī)制展開分析。更多的代碼閱讀內(nèi)容會(huì)在后面的章節(jié)中逐步展開,敬請(qǐng)期待。 作者:楊非 前言 TiDB-DM 是由 PingCAP 開發(fā)的一體化數(shù)據(jù)同步任務(wù)管理平臺(tái),支持從 MySQL 或 MariaDB 到 TiDB 的全量數(shù)據(jù)遷移和增量數(shù)據(jù)同步,在 TiDB DevCon 2019 正...
閱讀 814·2021-11-11 16:54
閱讀 1557·2021-08-24 10:01
閱讀 1941·2019-08-30 15:54
閱讀 3324·2019-08-29 14:02
閱讀 3162·2019-08-28 18:22
閱讀 2273·2019-08-28 18:09
閱讀 3749·2019-08-26 10:26
閱讀 2688·2019-08-23 18:23