memoメモ

最近はGo言語関連で。φ(..)メモメモ

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)
}

gist: go1.4 TestMain example

TestATestBはなにかのテストコードだと思ってください。 TestMainで、setupteardownを呼び出すようにしています。この例ではテストが成功した時だけ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

となり、パッケージテストの最初と最後でそれぞれsetupteardownが呼ばれるのがわかると思います。

これまでinitメソッドでsetupしてz_test.goなどでteardownさせるなどの黒魔術的なことが必要でしたがこれで解決ですね。

基礎からわかる Go言語

基礎からわかる Go言語

WEB+DB PRESS Vol.82

WEB+DB PRESS Vol.82

  • 作者: 山口徹,Jxck,佐々木大輔,横路隆,加来純一,山本伶,大平武志,米川健一,坂本登史文,若原祥正,和久田龍,平栗遵宜,伊藤直也,佐藤太一,高橋俊幸,海野弘成,五嶋壮晃,佐藤歩,吉村総一郎,橋本翔,舘野祐一,中島聡,渡邊恵太,はまちや2,竹原,河合宜文,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/08/23
  • メディア: 大型本
  • この商品を含むブログを見る