コンテンツにスキップ

Go/goコマンド/test

出典: フリー教科書『ウィキブックス(Wikibooks)』

go testコマンドは、インポートパスで指定されたパッケージのテストを自動的に実行するためのGoコマンドのサブコマンドです。このコマンドは、*_test.goという命名規則を持つテストファイル内の関数をコンパイルし、実行します。

テストの実行と出力

[編集]

go testは、各パッケージのテスト結果を以下の形式で要約して出力します。

ok   archive/tar   0.011s
FAIL archive/zip   0.022s
ok   compress/gzip 0.033s
...
  • ok: テストが成功したことを示します。
  • FAIL: テストが失敗したことを示し、失敗したパッケージの詳細な出力が表示されます。

テスト実行前に、go testgo vet を実行して、テストコードに潜在的な問題がないかチェックします。

実行モード

[編集]

go testには、主に2つの実行モードがあります。

  1. ローカルディレクトリモード:
    • パッケージの引数を指定せずにgo testと実行した場合にこのモードになります。
    • カレントディレクトリにあるパッケージのソースとテストがコンパイルされ、テストが実行されます。
    • テストが完了すると、okまたはFAIL、パッケージ名、経過時間が表示されます。
    • このモードではキャッシュ機能が無効です。
  2. パッケージリストモード:
    • go test mathのように、明示的にパッケージ名を指定して実行した場合にこのモードになります。
    • コマンドラインで指定された各パッケージがコンパイルされ、テストが実行されます。
    • テストが成功した場合は、最終的なokの要約行のみが表示されます。失敗した場合は、完全なテスト出力が表示されます。
    • -bench-vフラグを付けると、成功したテストでも完全な出力が表示されます。
    • 成功したパッケージのテスト結果はキャッシュされます。これにより、不必要な再テストを避けることができます。キャッシュされた結果は、経過時間の代わりに(cached)と表示されます。

主なオプション

[編集]

go testには、テストの実行方法を制御するための様々なフラグがあります。

  • -c: テストバイナリをコンパイルしますが、実行はしません
  • -v: 詳細な出力(verbose output)を有効にし、テストの実行内容を詳しく表示します。
  • -json: テスト出力をJSON形式で出力します。自動処理に適しています。
  • -args: このフラグ以降の引数を、テストバイナリにそのまま渡します。
  • -vet=off: テスト実行前のgo vetによるチェックを無効にします。
  • -count=1: テストキャッシュを明示的に無効にする慣用的な方法です。