GOエッセイ-ユニットテスト-基礎テスト


ユニットテスト


先日、リーダーは私にGOユニットのテストを勉強させ、グループ内で共有させました.ここ数日、インターネットで資料と実践を調べた.以下をまとめる.
基礎知識:GOは私たちにテストフレームワークを提供して、go test、私たちに簡単にユニットテストを行うことができます.しかし、以下のルールを守らなければなりません.
  • テストファイルは_test.goエンディング
  • ユニットテストファイル名_test.goの前の部分 は、被測定方法が存在するgoファイルのファイル名である.(go testを実行することもできますが、統一された仕様を遵守する必要があります)
  • ユニットテストの関数はTestで始まる必要があります.公開関数
  • です.
  • テスト関数はtestingを指す.Tタイプのポインタ(主に性能をテストする場合はtesting.Bなど)は、テストの目的に応じて異なり、値を返すことはできません.
  • 関数名はTest+テスト関数名(テストタイプによってはBenchmarkなど)が望ましい.

  • 以上のルールを守れば、GOユニットテストを簡単に作成できます.
    インターネットで資料を調べていると、次のような文章が書かれています.
    テストコードのファイルの配置の位置は自由ですか?すぐにGOが本当にスマートだと感じて、待ちきれずに試してみました.
    パスを指定する必要がありますか?
    この言葉の意味が理解できなかったのかもしれませんが、個人的には、一つのカタログ(バッグ)の下に置いたほうがいいと思います.packageも自由に書けますか?やってみると結論が出ない.
    簡単なユニットテスト例addを書く.go
    package add
    
    func Add(a, b int) int{
        return a+b
    }

    add_test.go
    package add
    
    import "testing"
    
    func TestAdd(t *testing.T){
        if sum:=Add(1,2); sum!=3{
            t.Error("fail")// f(x)=y, want z 
        } else {
            t.Log("success")
        }
    }
    go test -vでテスト結果が表示されます
    (ここに私が踏んだ小さな穴があります.テストファイルを指定したいときはgo test file_test.goが間違っています.後でテストされたファイルを接続する必要があるからです.go test file_test.go file.go)
    最も簡単な基本テストにすぎません.もう1つのテスト方法は、テーブルグループテストと呼ばれます.実は複数の基本テストです.上のテストを簡単に改造
    package add
    
    import "testing"
    
    func TestAdd(t *testing.T){
        var tests = []struct{
            date []int
            want int
        }{
            {[]int{1, 2}, 3},
            {[]int{2, 5}, 7},
            {[]int{3, 9}, 11},
        }
    
        for _,v := range tests{
            if sum:=Add(v.date[0], v.date[1]); sum!=v.want{
                t.Errorf("Add(%d, %d) = %d, want %d", v.date[0], v.date[1], v.date[0]+v.date[1], v.want)
            } else {
                t.Log("success")
            }
        }
    }

    実行結果は、各テスト結果のセットを明確に表示します.この形式では、簡単にテスト例を追加することができます.