akms道東

ITイベント,勉強会への参加記録や趣味のことが書いてあるブログです.

Goでテストを実行する時の備忘録

Goでテストを回すには

最近Goで実装するものがあった。そこでテストを回すときの自分メモ兼今日の素振りの成果
とりあえず下記公式のページでTestingの箇所を見れば大まかにわかる
How to Write Go Code - The Go Programming Language

公式ページではリモートリポジトリに対するテストもやっているが今回はローカルに対してのみ
例としては以下のようなパッケージ構成を想定する

fizzbuzz
 |-- fizzbuzz.go
 |-- fizzbuzz_test.go

またfizzbuzz_test.goの内容は以下のように想定

package fizzbuzz
import(
    "testing"
)
func TestFizz(t *testing.T){
...
}
func TestBuzz(t *testing.T){
...
}

作成しているパッケージ内でまるっとテストを回すときは以下のようにする

> go test
  PASS
  ok      fizzbuzz 123.456s

テストを1つずつ結果を見ながらすすめる

> go test -v
  === RUN TestFizz
  --- PASS: TestFizz (xxx.xx seconds)
  === RUN TestBuzz
  --- PASS: TestBuzz (xxx.xx seconds)
  PASS
  ok       command-line-arguments xxx.xxxs

その他の実行方法

複数ファイルの場合

次の例として以下のように細かくファイルが分かれている場合

fizzbuzz
 |-- fizz.go
 |-- fizz_test.go
 |-- buzz.go
 |-- buzz_test.go

対象ファイルを指定して実行

> go test fizz.go fizz_test.go

自分がやってしまったミス

> go test fizz_test.go

上記の場合テストは以下のようにテストを実装する必要がある。ただしこのテストはどうなんだろう

package fizzbuzz
import(
    "testing"
    "fizzbuzz"
)
func TestFizz(t *testing.T) {
    fizzbuzz.Fizz()
    ...
}

パッケージが階層でわかれている場合

fizzbuzz
  |--fizz
  |   |-- fizz.go
  |   |-- fizz_test.go
  |-- buzz.go
  |-- buzz_test.go

以下のようにすると再帰的にテストを実行する

> go test ./...

Makefileを作成してある場合

Makefileを作成してテストについて記述しておくと以下のようにも実行できる

> make test

以上ざっくり自分メモと今日の素振りの成果。