歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

testing - 測試基本使用接口

testing - 測試基本使用接口

當你寫完一個函數,結構體,main之後,你下一步需要的就是測試了。testing包提供了很簡單易用的測試包。

寫一個基本的測試用例

測試文件的文件名需要以_test.go為結尾,測試用例需要以TestXxxx的樣式存在。

比如我要測試utils包的sql.go中的函數:

func GetOne(db *sql.DB, query string, args ...interface{}) (map[string][]byte, error) {

就需要創建一個sql_test.go

package utils

import (
    "database/sql"
    _ "fmt"
    _ "github.com/go-sql-driver/mysql"
    "strconv"
    "testing"
)

func Test_GetOne(t *testing.T) {
    db, err := sql.Open("mysql", "root:123.abc@tcp(192.168.33.10:3306)/test")
    defer func() {
        db.Close()
    }()
    if err != nil {
        t.Fatal(err)
    }

    // 測試empty
    car_brand, err := GetOne(db, "select * from user where id = 999999")
    if (car_brand != nil) || (err != nil) {
        t.Fatal("emtpy測試錯誤")
    }
}

testing的測試用例形式

測試用例有四種形式:
TestXxxx(t testing.T) // 基本測試用例
BenchmarkXxxx(b
testing.B) // 壓力測試的測試用例
Example_Xxx() // 測試控制台輸出的例子
TestMain(m *testing.M) // 測試Main函數

給個Example的例子:(Example需要在最後用注釋的方式確認控制台輸出和預期是不是一致的)

func Example_GetScore() {
    score := getScore(100, 100, 100, 2.1)
    fmt.Println(score)
    // Output:
    // 31.1
}

testing的變量

gotest的變量有這些:

  • test.short : 一個快速測試的標記,在測試用例中可以使用testing.Short()來繞開一些測試
  • test.outputdir : 輸出目錄
  • test.coverprofile : 測試覆蓋率參數,指定輸出文件
  • test.run : 指定正則來運行某個/某些測試用例
  • test.memprofile : 內存分析參數,指定輸出文件
  • test.memprofilerate : 內存分析參數,內存分析的抽樣率
  • test.cpuprofile : cpu分析輸出參數,為空則不做cpu分析
  • test.blockprofile : 阻塞事件的分析參數,指定輸出文件
  • test.blockprofilerate : 阻塞事件的分析參數,指定抽樣頻率
  • test.timeout : 超時時間
  • test.cpu : 指定cpu數量
  • test.parallel : 指定運行測試用例的並行數

testing包內的結構

  • B : 壓力測試
  • BenchmarkResult : 壓力測試結果
  • Cover : 代碼覆蓋率相關結構體
  • CoverBlock : 代碼覆蓋率相關結構體
  • InternalBenchmark : 內部使用的結構
  • InternalExample : 內部使用的結構
  • InternalTest : 內部使用的結構
  • M : main測試使用的結構
  • PB : Parallel benchmarks 並行測試使用結果
  • T : 普通測試用例
  • TB : 測試用例的接口

testing的通用方法

T結構內部是繼承自common結構,common結構提供集中方法,是我們經常會用到的:

當我們遇到一個斷言錯誤的時候,我們就會判斷這個測試用例失敗,就會使用到:

Fail  : case失敗,測試用例繼續
FailedNow : case失敗,測試用例中斷

當我們遇到一個斷言錯誤,只希望跳過這個錯誤,但是不希望標示測試用例失敗,會使用到:

SkipNow : case跳過,測試用例不繼續

當我們只希望在一個地方打印出信息,我們會用到:

Log : 輸出信息
Logf : 輸出有format的信息

當我們希望跳過這個用例,並且打印出信息:

Skip : Log + SkipNow
Skipf : Logf + SkipNow

當我們希望斷言失敗的時候,測試用例失敗,打印出必要的信息,但是測試用例繼續:

Error : Log + Fail
Errorf : Logf + Fail

當我們希望斷言失敗的時候,測試用例失敗,打印出必要的信息,測試用例中斷:

Fatal : Log + FailNow
Fatalf : Logf + FailNow

Copyright © Linux教程網 All Rights Reserved