ユニット(単体)テスト【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ライブラリ
より詳細なテストを行う場合は、GinkgoやGomegaを使います。
GinkgoはRubyなどに近い記述方法で、GomegaはJavascript寄りの記述方法となるようです。