Go 単体テスト - 入門 -
Goにおける単体テストに入門しましょう。
今回はフィボナッチ数列の項を返す関数をテストの対象とします。
fibonacci.goCopied!!package fibonacci func Fibonacci() func() int { a := 0 b := 1 return func() int { ret := a + b a = b b = ret return ret } }
ディレクトリ構成は下記の通りです。Goでは慣習的にテスト対象の実装のファイル名_test.go
に単体テストを書きます。
Copied!!$ tree ├── go.mod ├── go.sum └── pkg └── fibonacci ├── fibonacci.go └── fibonacci_test.go
テスト
今回はテストに以下2つのパッケージを使用しています
- testing
- Goにデフォルトで入っているパッケージです。
Test
で始まる関数を全てテスト対象として扱います。
- stretchr/testify/assert
- 外部パッケージです。
- 実値と期待値が一致しているかなどをチェックしてくれるツールです。期待通りでないときにテストを失敗に導いてくれます。
fibonacci_test.goCopied!!package fibonacci import ( "testing" "github.com/stretchr/testify/assert" ) func TestFibonacci(t *testing.T) { f := Fibonacci() expect := []int{1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946} for i := 0; i < 20; i++ { actual := f() assert.Equal(t, expect[i], actual) } }
テストの実行方法
-
カレントディレクトリ以下の全てのテストを対象にします
Copied!!$ go test ./... ok go-learning/pkg/fibonacci (cached)
-
詳細な結果を見たい時はVerboseオプションを使います
Copied!!$ go test -v ./... === RUN TestFibonacci --- PASS: TestFibonacci (0.00s) PASS ok go-learning/pkg/fibonacci (cached)
-
特定の関数を対象にする時は次のように実行します
Copied!!$ go test ./... -run TestFibonacci ok go-learning/pkg/fibonacci 0.003s