概要
ちょっとしたTipsです。知ってると便利かもしれません。
go test
する際などに
- 普段常に実行するテストではないけど必要なテスト
- 結構重いので毎回実行したくないテスト
などがあったりする場合に
-tags
オプションを付けて、実行をON/OFF出来たりします。
やり方ですが、追加で行いたいテストたちを含めたテストファイルの先頭にビルドタグをつけます。
// +build extratests package xxx
ビルドタグ付ける場合は以下の点に注意。
- package宣言よりも前に書かないといけない
//
の後に空白あける- ビルドタグとpackage宣言の間にブランクが一行以上必要
最後に go test
時に以下のようにオプションを付けます。
$ go test -v -tags=extratests ./...
-tags
オプションを付けた場合のみ、該当のビルドタグが付いたテストが実行されます。
オプションを付けない場合、ビルドタグが付いたテストは実行されません。
サンプルについて
今回もサンプルはついでなので github にアップしてあります。良かったらご参照ください。
試してみる
テスト対象を用意
以下のようなクソ関数があったとします。
package calc func Add(x, y uint32) uint64 { return uint64(x) + uint64(y) }
テストを用意
普段実行するテストが以下とします。
package calc import "testing" func TestAdd(t *testing.T) { x := uint32(100) y := uint32(200) ans := Add(x, y) if ans != uint64(300) { t.Errorf("want: %d\tgot: %d\n", uint64(300), ans) } }
追加テストで実行するテストを用意
普段は毎回実行対象じゃないけど、たまに実施したテストを用意
// +build extratests // // REFERENCES: // - https://medium.com/tech-at-wildlife-studios/testing-golang-code-our-approach-at-wildlife-6f41e489ff36 // // このテストは go test にて -tags=extratests が指定された時だけ実行されます. // // buildコメントは、以下のルールに従わないといけない // - package よりも前に書く // - package の前に空行をあける // package calc import ( "testing" "time" ) func TestSuperHeavy(t *testing.T) { time.Sleep(3 * time.Second) want := uint64(300) x := uint32(100) y := uint32(200) ans := Add(x, y) if ans != want { t.Errorf("want: %d\tgot: %d\n", want, ans) } time.Sleep(2 * time.Second) }
ビルドタグを指定せずに実行
-tags
オプションを指定せずに実行すると以下のようになります。
$ go clean -testcache $ go test -v ./... === RUN TestAdd --- PASS: TestAdd (0.00s) PASS ok github.com/devlights/go-test-tags-option/internal/calc 0.005s
ビルドタグを付けたテストファイルに定義されているテストは実行されていません。
ビルドタグを指定して実行
-tags
オプションを指定して実行すると以下のようになります。
$ go clean -testcache $ go test -v -tags=extratests ./... === RUN TestSuperHeavy --- PASS: TestSuperHeavy (5.00s) === RUN TestAdd --- PASS: TestAdd (0.00s) PASS ok github.com/devlights/go-test-tags-option/internal/calc 5.017s
ビルドタグを付けたテストファイルに定義されているテストが実行されていますね。
参考情報
おすすめ書籍
自分が読んだGo関連の本で、いい本って感じたものです。
- 作者:Katherine Cox-Buday
- 発売日: 2018/10/26
- メディア: 単行本(ソフトカバー)
- 作者:松尾 愛賀
- 発売日: 2016/04/15
- メディア: 単行本(ソフトカバー)
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- 作者:Alan A.A. Donovan,Brian W. Kernighan
- 発売日: 2016/06/20
- メディア: 単行本(ソフトカバー)
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場