Golangユニットテスト

3036 ワード

Goのtestingパッケージは、go testコマンドとともに使用される自動テストをサポートします.テストファイルとテスト関数は、次の条件を満たす必要があります.
  • テストコードは*_test.goファイル
  • に保存する必要があります.
  • テスト関数の命名はTestNameフォーマットに合致し、Nameは大文字で始まる
  • である.
  • テストファイルと被テストファイルは同じパッケージにある
  • feibo.goファイルでは、Goでのテストを順次説明するために、フィボラッチシーケンスを生成する方法が定義されている.
    package main
    
    import (
    	"errors"
    )
    
    func fibo(n int) int {
    	if n == 0 || n == 1 {
    		return 1
    	}
    	return fibo(n-1) + fibo(n-2)
    }
    
    func fibonacci(n int) (sequence []int, err error) {
    	if n < 0 {
    		return []int{}, errors.New("param shouldn't less than zero")
    	}
    	for i := 0; i <= n; i++ {
    		sequence = append(sequence, fibo(i))
    	}
    	return
    }
    

    ユニットテスト


    デフォルトのgo testは、go buildパラメータをサポートするすべてのユニットテスト関数を実行します.-vは、すべてのテスト関数の実行の詳細を表示し、-run regexは指定したテスト関数(正規表現)を実行します.
    // feibo_test.go 
    
    package main
    
    import (
    	"errors"
    	"reflect"
    	"testing"
    )
    
    //  
    type fTest struct {
    	in  int
    	out []int
    	err error
    }
    
    var fTests = []fTest{
    	{-1, []int{}, errors.New("param shouldn't less than zero")},
    	{0, []int{1}, nil},
    	{1, []int{1, 1}, nil},
    	{5, []int{1, 1, 2, 3, 5, 8}, nil},
    }
    
    var BenchSink int
    
    func TestFibo(t *testing.T) {
    	for _, value := range fTests {
    		if res, _ := fibonacci(value.in); !reflect.DeepEqual(res, value.out) {
    			t.Errorf("fibonacci: [%v], actually: [%v]", value.out, res)
    		}
    	}
    }
    
    func BenchmarkFibo(b *testing.B) {
    	for i := 0; i < b.N; i++ {
    		for _, value := range fTests {
    			res, _ := fibonacci(value.in)
    			BenchSink += len(res)
    		}
    	}
    }
    

    テストを行う
    D:\gotest>go test feibo.go feibo_test.go -v
    === RUN   TestFibo
    --- PASS: TestFibo (0.00s)
    PASS
    ok      command-line-arguments  0.137s
    

    データムテスト


    パフォーマンステストは、1回の実行平均時間を計算するのに十分な回数を実行する必要があります.デフォルトでは、go testはパフォーマンステスト関数を実行せず、-benchパラメータを使用する必要があります.go test -bench regexp、正規表現に一致するベンチマークテストのみが実行されます.すべてのベンチマークテストを実行するには、-bench .または-bench=.を使用します.テスト結果は、一般的に次のように構成されています.
    D:\gotest>go test -bench=. feibo.go feibo_test.go -v
    === RUN   TestFibo
    --- PASS: TestFibo (0.00s)
    goos: windows
    goarch: amd64
    BenchmarkFibo-12         5000000               262 ns/op
    PASS
    ok      command-line-arguments  1.714s
    

    ベンチマークテストを実行する環境、オペレーティングシステム、アーキテクチャ.テストの回数は5000000で、この数値は固定されず、b.Nは関数の実行時間に応じて適切な値を取ります.262 ns/opは、1回の操作を実行するのに必要なナノ秒を表す.

    オーバーライド率のテスト


    テストオーバーライド率は、テストの有効性を測定する手段であり、テストオーバーライドは、テスト要件およびテスト例のオーバーライドまたは実行済みコードのオーバーライドによって表される.パラメータ-coverを使用してカバー率分析を行った.テスト結果は、一般的に次のように構成されています.
    D:\gotest>go test -cover feibo.go feibo_test.go -v
    === RUN   TestFibo
    --- PASS: TestFibo (0.00s)
    PASS
    coverage: 100.0% of statements
    ok      command-line-arguments  0.132s  coverage: 100.0% of statements