Golangテスト周りに関する覚書
基本的なテストコード
package mypackage
func MyFunction(s string) string {
return s + s
}
package mypackage
import (
"testing"
)
func TestMyFunction(t *testing.T) {
input := "わーい"
got := MyFunction(input)
want := "わーいわーい"
if got != want {
t.Errorf("got:%s want: %s", got, want)
}
}
テストの実行
全てのテストを実行
go test
パッケージ単位で実行
関数単位で実行
ファイル名を指定して実行
カバレッジの計測
ベンチマークの計測
ビルドタグによるテスト対象の制御
並列実行
テストコードを書く
前処理/後処理
並列実行
テストをスキップ
Exampleテスト
テストデータ
テストコードのパッケージ
ヘルパー関数
func helperFunction(t *testing.T, s string) string {
t.Helper() //
u, err := url.Parse(s)
if err != nil {
t.Fatal(err)
}
return u
}
func TestHello(t *testing.T) {
message := "ieeeeeee"
result := Echo(message)
expext := message
if result != expext {
t.Error("\n実際: ", result, "\n理想: ", expext)
}
t.Cleanup(func() {
t.Log("Cleanup")
})
}
T.Error
テーブル駆動テスト
非公開関数をテストする
benchmark
便利ライブラリ
参考資料
Appendix-1
type T
func (c *T) Cleanup(f func())
func (t *T) Deadline() (deadline time.Time, ok bool)
func (c *T) Error(args ...interface{})
func (c *T) Errorf(format string, args ...interface{})
func (c *T) Fail()
func (c *T) FailNow()
func (c *T) Failed() bool
func (c *T) Fatal(args ...interface{})
func (c *T) Fatalf(format string, args ...interface{})
func (c *T) Helper()
func (c *T) Log(args ...interface{})
func (c *T) Logf(format string, args ...interface{})
func (c *T) Name() string
func (t *T) Parallel()
func (t *T) Run(name string, f func(t *T)) bool
func (t *T) Setenv(key, value string)
func (c *T) Skip(args ...interface{})
func (c *T) SkipNow()
func (c *T) Skipf(format string, args ...interface{})
func (c *T) Skipped() bool
func (c *T) TempDir() string
T.Cleanup
- 全てのテストが完了した際に呼び出される関数を登録する
func TestHello(t *testing.T) {
message := "ieeeeeee"
result := Echo(message)
expext := message
if result != expext {
t.Error("\n実際: ", result, "\n理想: ", expext)
}
t.Cleanup(func() {
t.Log("Cleanup")
})
}