20 go單元測試

2021-09-07 19:04:12 字數 2432 閱讀 5278

go本身提供了一套輕量級的測試框架。符合規則的測試**會在執行測試時被自動識別並執行。單元測試原始檔的命名規則如下:

必須是以_test.go結尾的檔案,比如manager_test.go

go的單元測試函式分為兩類:功能測試函式和效能測試函式,分別以test和benchmark為函式名字首並以*testing.t為單一引數的函式。下面是測試函式宣告的例子:

func testadd1(t *testing.t)

func benchamarkadd1(t *testing.t)

下面我們看下例子

這裡我有2個**檔案,乙個是**檔案,乙個測試**檔案,共放在lib目錄下。

-----   lib目錄

|____ manager.go

|____ manager_test.go

我們看下測試檔案**,走功能測試的**,必須是以test開頭的方法,因為我們傳入的是*testing.t的引數,所以函式名必須是test開頭的

// manager_test

package library

import (

"testing" // 測試包

)func testops(t *testing.t)

if mm.len() != 0

m0 := &musicentry

mm.add(m0)

if mm.len() != 1

m := mm.find(m0.name)

if m == nil

if m.id != m0.id || m.artist != m0.artist || m.name != m0.name || m.source != m0.source || m.type != m0.type

m, err := mm.get(0)

if m == nil

m = mm.remove(0)

if m == nil || mm.len() != 0

}

編寫完成後,我們直接切換到這個lib目錄下,執行go test 即可

d:\leolearn\golearn\src\go_dev\musicplayer\lib>go test

pass ---> 執行成功

ok go_dev/musicplayer/lib 0.469s

出現pass和ok,那麼就說明我們編寫的測試**ok沒有問題,manager這個程式也ok,通過了測試**。

效能性單元測試

我們可以使用go自帶的test模組來做效能測試,由於傳入的是testing.b引數,所以這裡我們的函式必須以benchmark。 如下所示

func add(a, b int) int 

func benchmarkhowfast(b *testing.b)

}

full example :

// manager_test

package library

import (

"testing"

"time"

)func testops(t *testing.t)

if mm.len() != 0

m0 := &musicentry

mm.add(m0)

if mm.len() != 1

m := mm.find(m0.name)

if m == nil

if m.id != m0.id || m.artist != m0.artist || m.name != m0.name || m.source != m0.source || m.type != m0.type

m, err := mm.get(0)

if m == nil

m = mm.remove(0)

if m == nil || mm.len() != 0

}func add(a, b int) int

func benchmarkhowfast(b *testing.b)

}

然後我們執行下測試**,由於加入了效能測試**,我們需要加入-bench引數

d:\leolearn\golearn\src\go_dev\musicplayer\lib>go test -bench="."

// benchmark名字-cpu 迴圈次數 平均每次執行時間(納秒)

benchmarkhowfast-4 2000000000 0.39 ns/op

pass

ok go_dev/musicplayer/lib 7.249s

go單元測試

go本身提供了一套輕量級的測試框架。mytest工程下有兩個檔案 main.go package main func main func add a,b int intmain test.go package main import testing func testadd1 t testing.t...

Go單元測試

對包含網路請求和響應的函式進行單元測試需要我們模擬客戶端請求和服務端返回。以乙個登入模組為例,main.go檔案如下 其中的重點是利用 http.newrequest構造乙個虛擬的http get請求,再用httptest.newrecorder 建立http.responesewriter,模擬真...

Go單元測試

go單元測試 1.使用testing框架 1.1.go test 如果執行正確,無日誌.錯誤時,會輸出日誌 1.2.go test v 執行正確或錯誤都會輸出日誌 1.3.當出現錯誤時,可以使用t.fatalf 來格式化輸出錯誤資訊,並退出日誌 1.4.t.logf 方法可以輸出相應的日誌 1.5....