[Go言語]テストコードの書き方1~基礎編~

Go言語の単体テストコードの書き方をまとめます。

単体テストは、コードの品質を保つ上で非常に重要です。世界的に見れば、「テストコードのないコードは、見る価値もないコード」とされているくらいです。

参考

Go言語テストメモ

単体テストの基本

まずは、以下のフォルダとファイルを作成しましょう。

プロダクトファイル(sort.go)とテストファイル(sort_test.go)を同階層に置いています。

プロダクトファイルには、要素の並び替えの処理を実装します。

テストファイルには、「testingパッケージ」を用いて、テストコードを記述していきます。

テスト関数は、「TestXXXX」となるように先頭にTestとつけましょう。また、引数には、「testing.T」引数を持ちます。

次に、テストコードを実装します。

わかりやすさのレベルでしかないのですが、「Init」、「Execution」、「Validation」の3つのセクションを設けています。

Init・・・初期データ準備エリア
Execution ・・・ テスト対象関数実行エリア
Validation ・・・ 検証エリア

これは、決まりではありません。一つの方法です。

terminal上から「go test」コマンドを実行するとテストができます。

カバレッジ

-cover」オプションをつけてコマンドを実行すると「テストの包括率」が表示されます。

実装したコードに対して、どの程度の割合でテストができているか示す指標の様なものです。

現時点では、カバレッジ100%になっています。

統合テスト

異なるレイヤーのUnit Testを統合的にテストする、それが統合テストです。

「api」フォルダを作成して、utilsフォルダをapiフォルダ配下に格納しましょう。

続いて、api配下に「services」フォルダを作成し、sort_service.goファイルを作成します。

このsort_service.goには、ビジネスロジックを記述します。

そして、sort_service_test.goには、sort.goとsort_service.goの統合的なテストを書きます。

sort_test.goと同じ検証(Validation)をしていますが、ひとまずテストを実行します。

OKですね。

ベンチマーク

ベンチマークとは、ソフトウェアの処理性能を定量的に評価するための基準となるテストを指します。

実は、Go言語にはSort関数が既に組み込まれています。

このSort関数を基準に、私たちが実装したSort関数の性能をテストしてみましょう。

sort.goにSort関数を実装します。

続いて、sort_tests.goのテストコードを修正します。

テストを実行してみましょう。

テストは無事にPassした様ですね。

ベンチマークを測る時は、testingパッケージの「*testing.B」を利用します。

ベンチマークテストを実行したい場合は、「-bench」オプションを付与します。

また、Visual Studio Codeで、GoのExtensionを導入している場合は、Visual Studio Code上で実行できます。※run benchmarkを押下します

上記ですが、ループあたり11.3 nsの速度でループが10000000回実行されたことを意味します。3回実行しておきましょう。

Go言語の組み込みSort関数の方もBenchmark関数を作成します。

まとめ

今回は、Go言語のテストの実行方法、カバレッジおよび統合テストについての概略、ベンチマークの実装・実行方法について解説しました。

次回は、REST APIのテストコードについて解説していきたいと思います。

コメントを残す