ReadMeFirst
こんにちは @marnie_ms4 です。
筆不精で、今まではブログを書いては放置したりばかりだったのですが、
業務でgoを使っているので、golangについて記事を書き溜めていこうと思います。
(主に自分の備忘的なところもありますが)
さて、golangでは自動テストを標準でサポートしています。
なにはなくとも言語を使う上でテストコードは必須ですよね。
ということで、この記事ではテストの実行や作り方について記載します。
テストの作り方
testファイルは ****_test.go
という命名で作成します。
example.go
example.go
package main
import (
"errors"
)
func example(code string) (int,error) {
if code == "hoge" {
return 1,nil
}
return 0,errors.New("code must be hoge")
}
example_test.go
testing packageの以下に従って作成します。
To write a new test suite, create a file whose name ends _test.go that contains the TestXxx functions as described here.
example_test.go
package main
import (
"testing" // テストで使える関数・構造体が用意されているパッケージをimport
)
func TestExampleSuccess(t *testing.T) {
result, err := example("hoge")
if err != nil {
t.Fatalf("failed test %#v", err)
}
if result != 1 {
t.Fatal("failed test")
}
}
func TestExampleFailed(t *testing.T) {
result, err := example("fuga")
if err == nil {
t.Fatal("failed test")
}
if result != 0 {
t.Fatal("failed test")
}
}
実行
go test
go test -run
でテストが行えます。
go test packagePath # cf. go test github.com/hoge/moge パッケージを指定
go test -run '' # カレントディレクトリ内の全てのテストを実行
go test -run Foo # Fooを含むテスト関数を実行
testing package より。
go test -help
でオプションを確認可能。
再帰的に行いたい場合は以下など便利。
go test -v hoge/... # hoge/以下のテストを実行
go test ... # GOPATH以下全てテストしようとするので終わらないので注意
実行すると
$ go test -run ""
PASS
ok playground_/moge 0.794s
まとめ
こんな感じでテストを書いたり、実行する事ができます。
他に
- BenchMark用のテストユーティリティやパッケージも用意されている
- 標準でassertionがない
- subTest,tableDrivenTest
-
-parallel n
による並列実行
など書きたいことがありますので、別記事でtesting packageの説明も交えつつ、
より実践的な内容を書きたいと思います。