Goのテストでsetup/teardownする #golang
go1.4でtestingパッケージにTestMainが追加されました。
func TestMain(m *testing.M)
を定義してあると、go test
はこのメソッドを呼び出します。試しに書いてみます:
package example_test import ( "os" "testing" ) func TestA(t *testing.T) { } func TestB(t *testing.T) { } func setup() { println("setup") } func teardown() { println("teardown") } func TestMain(m *testing.M) { setup() ret := m.Run() if ret == 0 { teardown() } os.Exit(ret) }
TestA
とTestB
はなにかのテストコードだと思ってください。
TestMain
で、setup
とteardown
を呼び出すようにしています。この例ではテストが成功した時だけteardornするようにしています。
go test -v
してみると:
$ go test -v setup === RUN TestA --- PASS: TestA (0.00s) === RUN TestB --- PASS: TestB (0.00s) PASS teardown ok testmain 0.004s
となり、パッケージテストの最初と最後でそれぞれsetup
とteardown
が呼ばれるのがわかると思います。
これまでinitメソッドでsetupしてz_test.goなどでteardownさせるなどの黒魔術的なことが必要でしたがこれで解決ですね。
- 作者: 古川昇
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- クリック: 7回
- この商品を含むブログ (7件) を見る
- 作者: 山口徹,Jxck,佐々木大輔,横路隆,加来純一,山本伶,大平武志,米川健一,坂本登史文,若原祥正,和久田龍,平栗遵宜,伊藤直也,佐藤太一,高橋俊幸,海野弘成,五嶋壮晃,佐藤歩,吉村総一郎,橋本翔,舘野祐一,中島聡,渡邊恵太,はまちや2,竹原,河合宜文,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/23
- メディア: 大型本
- この商品を含むブログを見る