golang中的單元測試

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

一般為了保證整個系統的穩定性,通常都需要編寫大量的單元測試,諸如像java的junit,php的phpunit等都提供了類似的功能。golang中的testing包提供了這個測試的功能,結合go test工具搞起來就很方便了。

golang中的單元測試不單有功能測試,也還提供了效能測試,非常給力。

功能測試

在golang的src目錄下建立目錄math,測試目錄結構如下:

golang單元測試目錄

fibonacci.go代碼如下,主要有一個Fibonacci函數

package lib //斐波那契數列//求出第n個數的值func Fibonacci(n int64) int64 {    if n < 2 {        return n    }    return Fibonacci(n-1) + Fibonacci(n-2)

 fibonacci_test.go就是測試的檔案了,golang需要測試檔案一律用”_test”結尾,測試的函數都用Test開頭,代碼如下: 

package lib import (    "testing") func TestFibonacci(t *testing.T) {    r := Fibonacci(10)    if r != 55 {        t.Errorf("Fibonacci(10) failed. Got %d, expected 55.", r)    }}

使用go test測試這個程式

$ go test lib ok lib 0.008s

如果提示找不到包,則將該代碼路徑加入環境變數GOPATH就可以了。 

can't load package: package lib: cannot find package "lib" in any of:

效能測試

結合上面的方法,這裡測試一下函數的效能,如果需要進行效能測試,則函數開頭使用Benchmark就可以了。

//效能測試func BenchmarkFibonacci(b *testing.B) {    for i := 0; i < b.N; i++ {        Fibonacci(10)    }}

接下來執行這個效能測試: 

$ go test -bench=. lib PASS BenchmarkFibonacci 5000000 436 ns/op ok lib 2.608s

其中第二行輸出表示這個函數運行了5000000次,平均運行一次的時間是436ns。

這個效能測試只測試參數為10的情況。如果有需要可以測試多個參數:

//測試參數為5的效能func BenchmarkFibonacci5(b *testing.B) {    for i := 0; i < b.N; i++ {        Fibonacci(5)    }} //測試參數為20的效能func BenchmarkFibonacci20(b *testing.B) {    for i := 0; i < b.N; i++ {        Fibonacci(20)    }}

運行一下: 

$ go test -bench=. lib PASS BenchmarkFibonacci 5000000 357 ns/op BenchmarkFibonacci5 100000000 29.5 ns/op BenchmarkFibonacci20 50000 44688 ns/op ok lib 7.824s

如果效能測試的方法非常多,那需要的時間就會比較久。可以通過-bench=參數設定需要啟動並執行效能測試行數: 

$ go test -bench=Fibonacci20 lib PASS BenchmarkFibonacci20 50000 44367 ns/op ok lib 2.677s

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.