13章テスト

この20年間を振り返ってみると、コードの質を高めることにもっとも貢献したのはテスト自動化が広く普及したことではないかと思えます。プログラミング言語も、それを取り巻く環境も、ソフトウェアの質向上に焦点を当てていることを考えれば、Goの標準ライブラリにテスト支援機能が含まれていても何の不思議もありません。Goではコードのテストが非常に簡単にできます。テストしない言い訳はできません。

この章では、Goにおけるコードのテスト方法、テストのユニット化と統合、コードカバレッジの測定、ベンチマークの作成、並行性に関する問題をGoの「レースチェッカー」を使ってチェックする方法などを説明します。説明の中で、テストしやすいコードの書き方について、そしてその書き方がなぜコードの質を向上させるのかについても論じます。

13.1 テストの基礎

Goのテスト関連機能は「ライブラリ」と「ツール」の2つに分けられます。標準ライブラリ内のパッケージtestingはテストを作成するための型と関数を提供しています。また、Goにバンドルされているツールのgo testはテストを実行してレポートを作成します。ほかの多くの言語と異なり、Goのテストは製品版のコードと同じディレクトリ、同じパッケージに置かれます。テストが同じパッケージ内にあるので、エクスポートされていない関数や変数にもアクセスしてテストすることができます。また、「公開APIだけを対象にしていることが保証できるテスト」を作成する方法も紹介します。

まず、簡単な関数を作成して、それがきちんと動くかどうかテストしてみましょう。ファイルch13/adder/adder.goに次のような関数があります。

func addNumbers(x, y int ...

Get 初めてのGo言語 ―他言語プログラマーのためのイディオマティックGo実践ガイド now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.