過去にGo言語に関する記事をいくつか書いてきましたが、どこかでテストケースを書く場合が出てきます。
今回はそのGo言語のテストケースについての備忘録になります。
詳しくは参考資料に挙げているページ様を参照してください。
では、始めます。
1:テストケースに必要なライブラリ
テストケースを書く場合には以下のライブラリが必要になるのでそれぞれimportに記述します。
- testing
Go言語の標準ライブラリで必須。
必須ではないがassertを行うためのライブラリであると便利。
2:テストケースの書き方
テストケースを書くには以下の制約があります。
- ファイル名は必ず「xxx_test.go」の形式にする
- テスト関数は必ず「*testing.T」を引数とする
- テスト関数は必ず「Testから始め直後の文字は大文字または_(アンダーバー)」の形式にする
ファイル名の制約については、例えば「hoge.go」というファイルのテストケースを作成する場合は「hoge_test.go」のファイル名で作成します。
引数については、書いてある通り「*testing.T」を引数に設定します。
テスト関数については、例えば「HogeFunc」という関数名があった場合は「TestHogeFunc」または「Test_HogeFunc」の関数名で作成します。
これらをまとめたテストケースの例としては、以下のように書きます(あくまで例なのでこのコード単体では動きません)。
・hoge_test.go
package gotest import ( "hoge" "testing" "github.com/stretchr/testify/assert" ) // テスト関数 func TestHogeFunc(t *testing.T) { // 予想結果 expected := true // 実際の結果 actual := hoge.HogeFunc() // 結果の比較 assert.Equal(t, expected, actual) }
上記のようにテストコードを書くことができます。
書いたテストコードはテストコードがあるところまで移動した後、以下のコマンドで実行します。
go test -v hoge_test.go
また同階層にあるテストコードのファイル全てをまとめて実行するコマンドは以下の通りです。
go test -v ./...
3:テストケースの実例
テストケースの書き方や実行方法はなんとなくわかったとは思います。
実例も解説したいと思ったのですが、ディレクトリ分けやgo mod tidyコマンドを打ったりなど割と手順が長くなってしまうため、GitHubにテストケースの実例をアップロードしておきました。
クローンやダウンロードをして実際に動かしてみてください。ちなみにGoのバージョンは1.22.2を使用しているため、バージョンが違う場合は各自で対応をお願いします。
実際に実行すると、以下のような結果が表示されます。
go test -v ./... === RUN TestCalcAdd --- PASS: TestCalcAdd (0.00s) === RUN TestCalcSub --- PASS: TestCalcSub (0.00s) === RUN TestCalcMulti --- PASS: TestCalcMulti (0.00s) === RUN TestCalcDiv === RUN TestCalcDiv/正常系1 === RUN TestCalcDiv/正常系2 === RUN TestCalcDiv/異常系3 --- PASS: TestCalcDiv (0.00s) --- PASS: TestCalcDiv/正常系1 (0.00s) --- PASS: TestCalcDiv/正常系2 (0.00s) --- PASS: TestCalcDiv/異常系3 (0.00s) PASS ok gotest 0.254s
一部を書き換えて意図的にテストを失敗させた場合は以下のようになります。
go test -v ./... === RUN TestCalcAdd add_sub_test.go:18: Error Trace: xxxxxx/add_sub_test.go:18 Error: Not equal: expected: 9 actual : 8 Test: TestCalcAdd --- FAIL: TestCalcAdd (0.00s) === RUN TestCalcSub --- PASS: TestCalcSub (0.00s) === RUN TestCalcMulti --- PASS: TestCalcMulti (0.00s) === RUN TestCalcDiv === RUN TestCalcDiv/正常系1 === RUN TestCalcDiv/正常系2 === RUN TestCalcDiv/異常系3 --- PASS: TestCalcDiv (0.00s) --- PASS: TestCalcDiv/正常系1 (0.00s) --- PASS: TestCalcDiv/正常系2 (0.00s) --- PASS: TestCalcDiv/異常系3 (0.00s) FAIL FAIL gotest 0.248s FAIL
以上がGo言語でのテストケースの書き方になります。
実際に書いてみると他の言語と大きな違いはないので理解しやすいかと思います。
どの言語でもテストは必要になってくるので、テストケースを書けるようになっておきたいですね。
・参考資料