Go语言中如何进行测试
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
主要講解在Go語(yǔ)言中如何進(jìn)行代碼測(cè)試
?
1、調(diào)試和測(cè)試
????????????在程序開(kāi)發(fā)中應(yīng)該更多的注重測(cè)試而不是調(diào)試,即測(cè)試的優(yōu)先級(jí)重于調(diào)試
2、傳統(tǒng)測(cè)試與表格驅(qū)動(dòng)測(cè)試
????????傳統(tǒng)測(cè)試在大多數(shù)情況下使用代碼進(jìn)行的單元測(cè)試,示例代碼如下:
????????????????
????????? ? 傳統(tǒng)測(cè)試的缺點(diǎn):
- 測(cè)試數(shù)據(jù)與測(cè)試邏輯耦合在一起
- 出錯(cuò)信息不準(zhǔn)確
- 一旦一個(gè)數(shù)據(jù)出錯(cuò)測(cè)試全部結(jié)束
????????表格驅(qū)動(dòng)測(cè)試 就是在傳統(tǒng)測(cè)試的基礎(chǔ)上?對(duì)測(cè)試數(shù)據(jù)與測(cè)試邏輯相分離,數(shù)據(jù)像表格一樣單獨(dú)存儲(chǔ),示例如下:
????????????
????? ? 在Go語(yǔ)言中一般采用表格驅(qū)動(dòng)測(cè)試,其優(yōu)點(diǎn)主要有:
- 分離測(cè)試數(shù)據(jù)與測(cè)試邏輯
- 擁有明確的錯(cuò)誤信息
- 可以部分失敗
- Go語(yǔ)言的語(yǔ)法使我們更容易實(shí)現(xiàn)表格驅(qū)動(dòng)測(cè)試
3、在Go語(yǔ)言中實(shí)現(xiàn)表格驅(qū)動(dòng)測(cè)試
????? ? 注意事項(xiàng):測(cè)試Go文件命名為:xxx_test.go,在測(cè)試Go文件中,測(cè)試方法使用大寫Test開(kāi)頭,測(cè)試方法傳入?yún)?shù)為:*testing.T
????? ? 現(xiàn)在示例對(duì)勾股數(shù)方法進(jìn)行表格驅(qū)動(dòng)的單元測(cè)試 以及性能測(cè)試 ,代碼如下:
package mainimport ( "testing""math" ) //傳入兩個(gè) int 類型數(shù)據(jù) a、b,返回 返回 a2+b2 func Triangle(a, b int) int {var c intc = int(math.Sqrt(float64(a*a + b*b)))return c }//定義測(cè)試方法對(duì)上面的 方法進(jìn)行測(cè)試 func TestTriangle(t *testing.T) {tests := []struct{ a, b, c int }{{3, 4, 5},{5, 12, 13},{8, 15, 17},{12, 35, 36},{30000, 40000, 5000},}for _, tt := range tests {if actual := Triangle(tt.a, tt.b); actual != tt.c {t.Errorf("Triangle(%d, %d); 實(shí)際結(jié)果: %d; 期望結(jié)果: %d",tt.a, tt.b, actual, tt.c)}}//輸出結(jié)果://=== RUN TestTriangle//--- FAIL: TestTriangle (0.00s)// 21_Test1_test.go:25: Triangle(12, 35); 實(shí)際結(jié)果: 37; 期望結(jié)果: 36// 21_Test1_test.go:25: Triangle(30000, 40000); 實(shí)際結(jié)果: 50000; 期望結(jié)果: 5000//FAIL }//對(duì)方法進(jìn)行性能測(cè)試 func BenchmarkTriangle(b *testing.B) {for i:=0;i<b.N;i++ {if actual := Triangle(3,4); actual != 5 {b.Errorf("Triangle(%d, %d); 實(shí)際結(jié)果: %d; 期望結(jié)果: %d",3, 4, actual, 5)}}//輸出結(jié)果(在短時(shí)間內(nèi)執(zhí)行了 2000000000 次 測(cè)試,每次耗時(shí) 0.42 ns)://goos: windows//goarch: amd64//2000000000 0.42 ns/op//PASS}?
????????Goland 編譯器會(huì) 自動(dòng)識(shí)別到?TestTriangle、BenchmarkTriangle 方法為測(cè)試方法,可以使其直接執(zhí)行,針對(duì)性能測(cè)試,我們可以使用Go提供的 Go tool 工具查看是什么操作占用了過(guò)多性能。
轉(zhuǎn)載于:https://my.oschina.net/ruoli/blog/1816384
總結(jié)
以上是生活随笔為你收集整理的Go语言中如何进行测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 从JS对象开始,谈一谈“不可变数据”和函
- 下一篇: 网盘纷退场 “云存储”仍是刚需