Golang学習ノート-テスト

2719 ワード

Goの標準ライブラリには、テストに関連するいくつかのライブラリが用意されています.その中で最も主要なのはtestingパッケージです.testingパッケージはgo testコマンドとソースコードのすべてを必要とします.test.go接尾辞の最後のテストファイルとともに使用する、一般的なテストファイルの名前は、mainなどのテストソースファイルの名前に対応する.goのテストファイル名はmian_test.go.

機能テスト


ソースコードをテストするには、テストファイルに次の形式のテスト関数を作成する必要があります.ここで、Xxxの頭文字は大文字の英字でなければなりません.テスト関数の内部では、Error、Failなどの一連の方法でテストに失敗したことを表すことができます.
func TestXxx(t *testing.T){...}

testing.T構造にはいくつかの非常に有用な方法がある.
  • Log():指定されたテキストをログに記録します.
  • Logf():指定されたフォーマットに従って、指定されたテキストをログに記録します.
  • Fail():テスト関数は失敗したとマークされますが、テスト関数の実行を続行できます.
  • FailNow():テスト関数を失敗としてマークし、テスト関数の実行を停止します.
  • Error():Log+Fail.
  • Errorf():Logf+Fail.
  • Fatal():Log+FailNow.
  • Fatalf():Logf+FailNow.
  • Skip():このテスト例をスキップします.
  • package main
    
    func add(a int,b int) int{
        return a+b
    }
    
    
    package main
    
    import "testing"
    
    func TestAdd(t *testing.T){
        if 5!=add(2,3){
            t.Fail()
        }
    }
    
    === RUN   TestAdd
    --- PASS: TestAdd (0.00s)
    PASS
    coverage: 100.0% of statements in ./...
    

    go testを使用すると、-vを使用してテストの詳細を取得し、-coverを使用してテスト例のコードのオーバーライド率を取得できます.
    go test -v -cover
    

    パラレルテスト


    テスト例の先頭にtestingを呼び出す.TのParallelメソッドを使用すると、テスト・インスタンスを並列に実行できます.フラグ-parallelを使用すると、最大並列実行のテスト・インスタンス数を指定できます.デフォルトはGOMAXPROCSです.
    go test -v -parallel 3
    

    データムテスト


    ベンチマークテストは主にパフォーマンスをテストするために使用され、各ベンチマークテスト関数は以下のフォーマットを満たす必要があります.
    func BenchmarkXxx(b *testing.B){...}
    

    ベンチマークテストの例を実行するには、go testコマンドを実行するときにフラグ-benchを使用し、このフラグのパラメータとして正規表現を使用して、自分が実行したいベンチマークテストファイルを識別する必要があります.ディレクトリの下のすべてのベンチマークテストファイルを実行する必要がある場合は、ポイントを-benchのパラメータとして使用するだけです.
    go test -v -cover -bench .
    

    関数の応答時間をテストするためには,正確な測定値が得られるまで,被テスト関数をb.N回実行する必要がある.
    package main
    
    import "encoding/json"
    
    type Student struct {
        Name  string
        Age   int
        Sex   string
    }
    
    func jsonMarshal(){
        student:=&Student{Name:"xiao hong",Age:10,Sex:" "}
        json.Marshal(student)
    }
    
    package main
    
    import "testing"
    
    func BenchmarkJsonMarshal(b *testing.B){
        for i:=0;i
    goos: windows
    goarch: amd64
    pkg: studygo
    BenchmarkJsonMarshal-4       3000000           481 ns/op
    PASS
    

    上記のコマンドは、ベンチマークテストと機能テストを実行します.必要に応じて、ユーザーはフラグ-runを実行することによって機能テストを無視することができます.-runフラグは、実行する必要がある機能テストの例を指定するために使用されます.もし私たちが存在しない機能テストの名前を-runフラグのパラメータとして使用すると、すべての機能テストは無視されます.たとえば、次のようになります.
    go test -run x -bench .