Series:
go-testing
Go でテストを書いてみる サブテスト編
Go の testing パッケージでサブテストを書いてみる。
開発環境
- go version go1.16.5 linux/amd64
本文
前回 の続きでサブテストを書いてみる。
リファレンス: 公式ドキュメント
公式ドキュメントに書いてある通り
func TestFoo(t *testing.T) {
// <setup code>
t.Run("A=1", func(t *testing.T) { ... })
t.Run("A=2", func(t *testing.T) { ... })
t.Run("B=1", func(t *testing.T) { ... })
// <tear-down code>
}
というように書くとサブテストを定義することができる。
前回のサンプルにした禁則処理のコードだが、行末禁則文字と分離禁則文字も考慮するようにしたのでサブテストを用いてテストを書き直してみた。
|
|
わかりやすいように詳細な出力をしながら実行してみる。
全テスト実行
$ go test ./internal/pkg/kinsoku/ -run '' -v
=== RUN TestExecKinsoku
=== RUN TestExecKinsoku/行頭禁則文字
=== RUN TestExecKinsoku/行末禁則文字
=== RUN TestExecKinsoku/分離禁則文字
--- PASS: TestExecKinsoku (0.00s)
--- PASS: TestExecKinsoku/行頭禁則文字 (0.00s)
--- PASS: TestExecKinsoku/行末禁則文字 (0.00s)
--- PASS: TestExecKinsoku/分離禁則文字 (0.00s)
PASS
ok github.com/k1350/ogpgen/internal/pkg/kinsoku 0.002s
Foo とつく関数のテストを実行(今回はそのようなテストは無いので何も実行しない)
$ go test ./internal/pkg/kinsoku/ -run 'Foo' -v
testing: warning: no tests to run
PASS
ok github.com/k1350/ogpgen/internal/pkg/kinsoku 0.002s [no tests to run]
ExecKinsoku とつく関数の「行」とつくサブテストを実行
$ go test ./internal/pkg/kinsoku/ -run 'ExecKinsoku/行' -v
=== RUN TestExecKinsoku
=== RUN TestExecKinsoku/行頭禁則文字
=== RUN TestExecKinsoku/行末禁則文字
--- PASS: TestExecKinsoku (0.00s)
--- PASS: TestExecKinsoku/行頭禁則文字 (0.00s)
--- PASS: TestExecKinsoku/行末禁則文字 (0.00s)
PASS
ok github.com/k1350/ogpgen/internal/pkg/kinsoku 0.002s
ExecKinsoku とつく関数の「行頭禁則文字」とつくサブテストを実行
$ go test ./internal/pkg/kinsoku/ -run 'ExecKinsoku/行頭禁則文字' -v
=== RUN TestExecKinsoku
=== RUN TestExecKinsoku/行頭禁則文字
--- PASS: TestExecKinsoku (0.00s)
--- PASS: TestExecKinsoku/行頭禁則文字 (0.00s)
PASS
ok github.com/k1350/ogpgen/internal/pkg/kinsoku 0.002s
感想
ベンチマークを書いたりしないのなら大体もう事足りると思うのだが、モックやスタブをどうするかが testing パッケージの公式ドキュメントからは読み取れないので気になっている。
ただ今作っている物は DB に接続することもないので、今後書く必要に迫られたときに調べることにする。