Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 18595] ファイルの概要

このコミットは、Go言語の標準ライブラリであるtestingパッケージのドキュメント、特にパッケージコメントの導入部分を改善することを目的としています。具体的には、テストの書き方に関する説明をより明確にし、_test.goファイルの配置やgo testコマンドの動作について詳細を追加しています。

コミット

commit f1e4184db62eba7cf1778b3a15251959c3e5adc2
Author: Rob Pike <r@golang.org>
Date:   Fri Feb 21 14:35:54 2014 -0800

    testing: improve introduction to package comment
    Fixes #7361.
    
    LGTM=bradfitz
    R=golang-codereviews, bradfitz
    CC=golang-codereviews
    https://golang.org/cl/66910045

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/f1e4184db62eba7cf1778b3a15251959c3e5adc2

元コミット内容

testing: improve introduction to package comment
Fixes #7361.

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/66910045

変更の背景

このコミットの背景には、Go言語のtestingパッケージのドキュメントが、新規ユーザーにとってテストの基本的な概念や書き方を理解する上で不十分であるという認識がありました。特に、TestXxx関数の宣言方法、テストファイルの命名規則(_test.go)、そしてそれらのファイルがどのようにパッケージビルドから除外され、go testコマンドによってのみ含まれるのかについての説明が不足していました。

コミットメッセージにあるFixes #7361は、この変更が特定のIssue(問題報告)に対応していることを示しています。Issue #7361は、testingパッケージのドキュメントが、テストの基本的なセットアップについて十分に説明していないという内容であったと推測されます。Rob Pike氏(Go言語の共同開発者の一人)は、このドキュメントの明確化が、Go言語のテストフレームワークをより使いやすくするために重要であると考え、この改善を行いました。

Go言語では、ドキュメントはコードと同じくらい重要であるという哲学があります。特に、標準ライブラリのパッケージコメントは、そのパッケージの目的、使い方、主要な機能について最初にユーザーが目にする情報源となるため、非常に重要視されています。このコミットは、その哲学に基づき、ユーザーエクスペリエンスを向上させるための典型的なドキュメント改善の一例と言えます。

前提知識の解説

Go言語のテストフレームワーク

Go言語には、標準ライブラリとしてtestingパッケージが提供されており、これを用いてユニットテストやベンチマークテストを記述します。外部のテストフレームワークを導入することなく、Goのツールチェイン(go testコマンド)と連携してテストを実行できるのが特徴です。

  • テスト関数の命名規則: テスト関数はTestで始まり、その後に続く文字列(例: TestMyFunction)は英数字で構成され、最初の文字は小文字であってはなりません。これらの関数は*testing.T型の引数を一つ取ります。
  • テストファイルの命名規則: テストコードを含むファイルは、テスト対象のパッケージと同じディレクトリに配置され、ファイル名の末尾が_test.goである必要があります。これにより、通常のビルドプロセスからは除外され、go testコマンドが実行されたときにのみコンパイル・実行されます。
  • *testing.T: テスト関数に渡される構造体で、テストの失敗を報告したり、テストをスキップしたりするためのメソッド(Error, Fail, Skipなど)を提供します。
  • go testコマンド: Go言語のテストを実行するためのコマンドです。_test.goファイルを自動的に検出し、テスト関数を実行します。様々なフラグ(例: -vで詳細表示、-runで特定のテストを実行、-shortで時間のかかるテストをスキップ)をサポートしています。

パッケージコメント

Go言語では、パッケージのソースコードの先頭に記述されるコメントが、そのパッケージのドキュメントとして扱われます。このコメントは、godocツールやGoの公式ドキュメントサイトで表示され、パッケージの概要や使い方を説明する重要な役割を担います。パッケージコメントは、packageキーワードの直前に記述され、パッケージ全体に適用されるべき情報を含みます。

Fixes #XXXX

Go言語のコミットメッセージでは、Fixes #XXXXという形式で、そのコミットが解決するIssueの番号を示すことが一般的です。これは、Issueトラッカーとコミット履歴を関連付け、どのコミットがどの問題を修正したのかを明確にするための慣習です。

技術的詳細

このコミットは、src/pkg/testing/testing.goファイルのパッケージコメントを修正しています。変更の核心は、testingパッケージの基本的な使い方に関する説明を、より詳細かつ明確にすることです。

具体的には、以下の点が改善されています。

  1. テスト関数の失敗シグナル: 以前は「これらのTestXxxルーチンは、テスト対象のパッケージ内で宣言されるべきです」という記述の後に、テストのスキップに関する説明が続いていました。変更後には、「これらの関数内で、失敗を通知するためにErrorFail、または関連するメソッドを使用してください」という、テストの失敗報告に関する基本的な情報が追加されました。これは、テストの目的である「コードの正しさを検証し、誤りがあれば報告する」という点に直接言及しており、より実践的な情報を提供しています。
  2. テストスイートの作成方法の詳細化:
    • 「新しいテストスイートを作成するには、_test.goで終わる名前のファイルを作成し、ここにTestXxx関数を含めます」という明確な指示が追加されました。
    • 「テスト対象のパッケージと同じパッケージにファイルを配置します」という、テストファイルの配置場所に関する重要な規則が明記されました。
    • 「このファイルは通常のパッケージビルドからは除外されますが、go testコマンドが実行されたときに含まれます」という、_test.goファイルの特殊な扱いについて説明が追加されました。これは、Goのビルドシステムとテストシステムの連携を理解する上で非常に重要な情報です。
  3. 追加情報への誘導: 「詳細については、go help testgo help testflagを実行してください」という形で、コマンドラインツールによるさらなるドキュメントへの誘導が追加されました。これにより、ユーザーはより深い情報を必要とした際に、どこを参照すればよいか明確に示されます。
  4. スキップメソッドの明確化: テストやベンチマークのスキップに関する説明が、「*Tおよび*BSkipメソッドの呼び出しによって、適用できない場合にスキップできます」と、より具体的にSkipメソッドに言及するように修正されました。

これらの変更は、単なる誤字脱字の修正や表現の変更ではなく、testingパッケージの導入部分として、ユーザーがGoでテストを始める際に必要となるであろう基本的な情報と、その背後にあるメカニズム(_test.goファイルの扱いなど)を網羅的に提供しようとする意図が見られます。これにより、特にGo言語やテストに不慣れな開発者にとって、testingパッケージの学習曲線が緩和されることが期待されます。

コアとなるコードの変更箇所

src/pkg/testing/testing.goファイルのパッケージコメント部分が変更されています。

--- a/src/pkg/testing/testing.go
+++ b/src/pkg/testing/testing.go
@@ -8,9 +8,17 @@
 //     func TestXxx(*testing.T)
 // where Xxx can be any alphanumeric string (but the first letter must not be in
 // [a-z]) and serves to identify the test routine.
-// These TestXxx routines should be declared within the package they are testing.
+// Within these functions, use the Error, Fail or related methods to signal failure.
+//
+// To write a new test suite, create a file whose name ends _test.go that
+// contains the TestXxx functions as described here. Put the file in the same
+// package as the one being tested. The file will be excluded from regular
+// package builds but will be included when the ``go test\'\' command is run.
+// For more detail, run ``go help test\'\' and ``go help testflag\'\'.
 //
 // Tests and benchmarks may be skipped if not applicable like this:
+// the Skip method of *T and *B:
 //     func TestTimeConsuming(t *testing.T) {
 //         if testing.Short() {
 //             t.Skip(\"skipping test in short mode.\")

コアとなるコードの解説

変更された部分は、testingパッケージのドキュメントコメントです。

  • 削除された行:
    • // These TestXxx routines should be declared within the package they are testing.
      • この行は、テスト関数がテスト対象のパッケージ内で宣言されるべきであるという情報を提供していましたが、新しい説明でより詳細にカバーされるため削除されました。
  • 追加された行:
    • // Within these functions, use the Error, Fail or related methods to signal failure.
      • テスト関数内でどのように失敗を報告するかについて、ErrorFailメソッドの使用を明確に指示しています。これはテストの基本的な目的を説明する上で重要です。
    • // To write a new test suite, create a file whose name ends _test.go that
    • // contains the TestXxx functions as described here. Put the file in the same
    • // package as the one being tested. The file will be excluded from regular
    • // package builds but will be included when the ``go test\'\' command is run.
      • これらの行は、Goのテストの最も基本的なセットアップ方法である_test.goファイルの作成と配置、そしてそのファイルが通常のビルドから除外され、go testコマンドによってのみ処理されるというメカニズムを詳細に説明しています。これはGoのテストシステムを理解する上で不可欠な情報です。
    • // For more detail, run ``go help test\'\' and ``go help testflag\'\'.
      • ユーザーがさらに詳細な情報を求める場合に、go helpコマンドを使用するように誘導しています。これにより、ドキュメントが簡潔さを保ちつつ、必要に応じて深い情報源へのアクセスを提供できます。
    • // the Skip method of *T and *B:
      • テストのスキップに関する説明の前に、*Tおよび*BSkipメソッドを使用することを明示的に追加し、より正確な表現にしています。

これらの変更により、testingパッケージのパッケージコメントは、Goでテストを始める開発者にとって、より包括的で分かりやすい入門ガイドとなっています。

関連リンク

参考にした情報源リンク

  • Go言語の公式ドキュメント
  • Go言語のソースコードリポジトリ
  • Go言語のGerrit Code Reviewシステム
  • Go言語のテストに関する一般的な情報源 (ブログ、チュートリアルなど)
  • Issue #7361に関する情報 (もし公開されているものがあれば)

(注: Issue #7361の具体的な内容は、公開されている情報からは直接確認できませんでしたが、コミットメッセージからドキュメントの改善に関するものであると推測されます。)