1. 導入: なぜテストが重要なのか?
プログラムを書いていると、「本当に意図通りに動いているか?」と不安になることはありませんか?手動で何度も実行して確認するのは大変ですし、修正を加えるたびに別の場所が壊れていないかを確認するのは至難の業です。Go言語には、この課題を解決するための強力な標準ツール「go test」が組み込まれています。これを使うことで、コードの動作を自動的かつ継続的に検証でき、自信を持って開発を進められるようになります。
2. 基礎知識: go testの仕組み
Go言語でテストを書くときには、主に2つのルールがあります。
・テストしたいファイル名が「hoge.go」なら、テストファイルは「hoge_test.go」という名前にする。
・関数名は「Test」で始まり、引数に「testing.T」型を受け取る。
「go test」コマンドを実行すると、Goはプロジェクト内にある「_test.go」という名前のファイルをすべて探し出し、その中にある「Test」から始まる関数を自動的に実行します。実は裏側では、Goが自動的にテスト用の「メイン関数」を生成し、別のプロセスとして実行するという高度な処理を行っています。これにより、本番のコードとテストコードを綺麗に分離しつつ、安全に検証ができる仕組みになっています。
3. 実装/解決策: 基本的なテストの書き方
テストを実装する手順は非常にシンプルです。
1. テストしたい関数と同じパッケージで「_test.go」ファイルを作成する。
2. 「import “testing”」を追加する。
3. 「TestXxx(t testing.T)」という形式で関数を定義し、期待値と実際の値を比較する。
4. サンプルプログラム
以下のコードを「calc.go」と「calc_test.go」に分けて作成して試してみてください。
[calc.go]
package main
// 足し算を行うシンプルな関数
func Add(a, b int) int {
return a + b
}
[calc_test.go]
package main
import “testing”
// TestAdd は Add 関数を検証するテストです
func TestAdd(t testing.T) {
result := Add(2, 3)
expected := 5
// 期待値と異なる場合にエラーを報告します
if result != expected {
t.Errorf(“期待値は %d ですが、実際は %d でした”, expected, result)
}
}
実行するには、ターミナルで対象のディレクトリに移動し、以下のコマンドを入力してください。
go test -v
5. 応用・注意点: 現場で役立つポイント
テストを書く際に陥りやすいポイントとして、「テストの独立性」が挙げられます。テスト同士が依存し合うと、あるテストが失敗した時に原因の特定が難しくなります。それぞれのテストは必ず「単独で実行しても成功する」状態を保ちましょう。
また、現場では「テーブル駆動テスト」という手法がよく使われます。これは、複数の入力値と期待値を構造体のリストにしてループで回す手法です。これにより、テストコードの重複を劇的に減らし、メンテナンス性を高めることができます。まずは小さな関数からテストを書く習慣をつけ、Go言語の強力なエコシステムを使いこなしていきましょう!

コメント