毎リリースそれなりに変更・追加がある ◦ https://golang.org/doc/go1.7#testing ◦ https://golang.org/doc/go1.8#testing ◦ https://golang.org/doc/go1.9#test-helper ◦ https://golang.org/doc/go1.10#test 01. How to study Go
go test ./table # サブパッケージを含めてテストを全て実行する $ go test ./... # 特定のテストコードだけ実行する(テスト対象も含めて指定する) $ go test sum_test.go sum.go # "Minus"というサブテスト(後述)だけを実行する $ go test ./... -v -run /Minus # Race conditionの検出 $ go test ./... -race • go testコマンド • サブパッケージを含めて実行 • 引数に応じて実行対象を絞れる • レースコンディションの検出 02. Start and Execute test
Go 1.10からテストの実行前にgo vetが実行される • go vetを抑制する / go test -vet=off go vetを抑制する 02. Start and Execute test $ go test github.com/budougumi0617/hogehoge ./foo_test.go:10:2: x declared and not used
build/testの結果がキャッシュされる ◦ ベンチマークなど一部のオプション付与時は除外 • キャッシュを削除する / go clean -testcache • キャッシュなしで実行 / go test -count=1 Test Cache 02. Start and Execute test
github.com/budougumi0617/go-testing/t 0.009s ok github.com/budougumi0617/go-testing/t/parallel (cached) ok github.com/budougumi0617/go-testing/t/table 0.009s # 全ての結果がキャッシュされている(つまり何も実行していない) $ go test ./... ok github.com/budougumi0617/go-testing/t (cached) ok github.com/budougumi0617/go-testing/t/parallel (cached) ok github.com/budougumi0617/go-testing/t/table (cached) # キャッシュを使わずに全て実行する $ go test ./... -count=1 ok github.com/budougumi0617/go-testing/t 0.011s ok github.com/budougumi0617/go-testing/t/parallel 0.011s ok github.com/budougumi0617/go-testing/t/table 0.010s 02. Start and Execute test
test -v ./... | tee ${TEST_RESULTS}/go-test.out • JUnit形式に変換する ◦ https://github.com/jstemmer/go-junit-report • 例えばCircle CIは公式ガイドどおりに ◦ https://circleci.com/docs/2.0/language-go/ 02. Start and Execute test
• テスト成否を各テストケースで出力できる • T.Parallel()メソッドで各ケースごとに並行実行できる • -test.runオプションでケースを指定して実行 • テストケースそれぞれに名前をつけられる testing.T.Runでサブテストにする(Go 1.7~) 03. How to write test