技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

ユニット(単体)テスト【Go】

テストファイルの作成

テストしたい対象のファイルと同階層に、テストファイルを作成することが推奨されています。
名称は、「<テスト対象のファイル名>_test.go」とします。

作成したファイルに、次のような内容を記述します。

package <package名>
import "testing"

func Test<テスト対象の関数名>(t *testing.T) {
    v := <テスト対象の関数名>(関数に必要な引数)
    if v != 3 {
        t.Error("Expected 3, got", v)
    }
}


対象が何であれ、共通な点は、
testingパッケージをimportする点と、
「func Test<テスト対象の関数名>(t *testing.T) {}」の中にテストコードを記述する点、
期待した結果ではない、つまりテストに失敗した時に、通知してもらうため、
「t.Error("")」を記述する点です。

ある理由があって、テストをスキップしたい場合には、t.Skip("")を利用します。

import "testing"

var skipFlg = true    // 例えば条件によってtrueとfalseを切り替える

func TestAverage(t *testing.T) {
    if skipFlg {
        t.Skip("〜のためスキップ")    // 以降の処理は行われない
    }
    v := Average([]int{1, 2, 3, 4, 5})
    if v != 3 {
        t.Error("Expected 3, got", v)
    }
}


他にもtesting.Tにはメソッドがいくつか存在します。

テストの実行

Visual Stadio Codeであれば、
テストファイルのテスト関数名、もしくはpackage名の上にtestボタンが表示されるので、それを押すか、
コマンドラインでテストの実行を指令します。
コマンドラインでの実行方法は次の通りです。

$ go test ./...

これは、現在のディレクトリ「./」とその下にあるディレクトリ「...」から、
全てのテストファイルを探してテストする、という意味になります。

より詳しい結果を見るには、testの後に-vをつけます。

$ go test -v ./...

testing.T.Skipに関する情報などは、この詳細を確認するコマンドを実行しないと表示されません。

サードパーティのtestingライブラリ

より詳細なテストを行う場合は、GinkgoGomegaを使います。
GinkgoはRubyなどに近い記述方法で、GomegaはJavascript寄りの記述方法となるようです。