Goユニットテストを完了する(3)--断言(testify)

2229 ワード

前編では,表駆動試験方法とgomock試験フレームワークを紹介し,試験効率と品質を大幅に向上させた.本稿では,テストにアサーションを導入し,テストの効率と品質をさらに向上させることを紹介する.

なぜ断言ライブラリが必要なのか


まず、Go標準パッケージの中でなぜ断言しなかったのかを見てみましょう.公式はFAQでこの質問に答えました.
golang.org/doc/faq#ass…
全体的に要約すると、「Goは断言を提供しないで、私たちはこれが一定の不便をもたらすことを知っています.その主な目的はあなたたちプログラマーが誤った処理をサボることを防止することです.私たちはこれが争点であることを知っていますが、私たちはこれがcoooool~~~~.」だから、私たちが断言ライブラリを導入した理由も明らかです.サボって、断言を導入することは私たちに便利を提供します.テスト効率を高め、コードの可読性を強化します.

testify


断言ライブラリの選択では,我々はあまり選択していないようで,start数と活発度から見ると,基本的にtestify本の独秀である.
github.com/stretchr/te…
比較がなければダメージはありません.まずtestifyを使用する前のテスト方法を見てみましょう.
func TestSomeFun(t *testing.T){
...
    if v != want {
        t.Fatalf("v , :%s, :%s", want, v)
    }
    if err != nil {
        t.Fatalf(" :%s", err)
    }
    if objectA != objectB {
        if objectA.field1 !=  objectB.field1 {
            // t.Fatalf() field1 ...bla bla bla
        }
         if objectA.field2 !=  objectB.field2 {
            // t.Fatalf() field2 ...bla bla bla
        }
        //  object ... bla bla bla
    }
...
}

上記のコードにはif...else..の判断が大量にあふれており、大段のエラー情報の組み立て(真・体力活...)、運が悪いと構造体の判断にぶつかってそれを遍歴しなければならない--直観的ではなく、低効で、本当にfashionではない.次に、testifyを使用して、上記のテスト例を改造します.
func TestSomeFun(t *testing.T){
    a := assert.New(t)
...
    a.Equal(v, want)
    a.Nil(err," , ")
    a.Equal(objectA, objectB)
...
}

3行で完成し、テストの意味は一目瞭然です.直観的で、効率的で、短くて、fashion.

まとめてみる


testifyは使いやすく、アップグレードが著しく、一度で好きになる怠け者の神器と言える.表駆動テスト、gomock、testifyを組み合わせた後、優雅できれいなユニットテストコードを書くことができます.しかし、テストコードの優雅さだけでは十分ではありません.main.goもおしゃれをする必要があります.次の記事では、このシリーズの最後の記事でも、wire依存注入フレームワークを紹介し、main.goダイエットを支援します.
転載先:https://juejin.im/post/5ce935a1e51d4510aa01147b