目次
今回の内容
単体テストに対する Go の組み込みサポートにより、実行中のテストが容易になります。具体的には、命名規則、Go のtesting
パッケージ、およびgo test
コマンドを使用して、テストをすばやく作成して実行できます。
今回の内容は下記のチュートリアルの内容となります
過去の記事
下記の内容を実施している前提となりますのでご了承ください
【Go言語入門①】macOSに環境構築して、Hello Worldを表示する
Go言語の環境構築方法をお伝えしていきます 【パッケージをダウンロード】 まずはGo言語の公式ドキュメントに移行し、パッケージをダウンロードします (Go言語のバージ…
【Go言語入門②】Go言語でモジュールを作成し、理解を深める
【前回の内容】 前回実施した内容を理解した前提なので、まずは下記をやってみてくださいね 【今回実施する内容】 このチュートリアルでは、2 つのモジュールを作成しま…
【Go言語入門③】シンプルなエラーハンドリング
【過去の記事】 このシリーズはGoの公式ドキュメントに記載されている、チュートリアルを参考にしています。 チュートリアルの過去の記事をすすめた前提となっておりま…
【Go言語入門④】ランダム処理を通して、配列・スライスを触れる
【過去の記事】 下記の内容を実施している前提となりますのでご了承ください 今回の内容は下記のチュートリアルの内容となります 【配列に似たスライスを利用する】 配…
テストコードを記述する
テストコードを記述する
STEP
greetings_test.goのファイルを作成
ファイル名の最後に _test.go
を付けると、go test
このファイルにテスト関数が含まれていることがコマンドに伝えられます。
STEP
greetings_test.goにテストコードを追加
package greetings
import (
"regexp"
"testing"
)
// TestHelloName は、名前を指定して greetings.Hello を呼び出し、
// 有効な戻り値をチェックします。
func TestHelloName(t *testing.T) {
name := "Gladys"
want := regexp.MustCompile(`\b` + name + `\b`)
msg, err := Hello("Gladys")
if !want.MatchString(msg) || err != nil {
t.Fatalf(`Hello("Gladys") = %q, %v, want match for %#q, nil`, msg, err, want)
}
}
// TestHelloEmpty は greetings.Hello を空の文字列、
// エラーのチェック。
func TestHelloEmpty(t *testing.T) {
msg, err := Hello("")
if msg != "" || err == nil {
t.Fatalf(`Hello("") = %q, %v, want "", error`, msg, err)
}
}
テストコマンドを実行する
対象モジュールのディレクトリ内で、下記のgo testを実行するとテストが実行されます。
go test
実際にやってみましょう。
$cd greetings
$go test -v
=== RUN TestHelloName
--- PASS: TestHelloName (0.00s)
=== RUN TestHelloEmpty
--- PASS: TestHelloEmpty (0.00s)
PASS
ok example.com/greetings 0.247s
カレントディレクトリ内にテストコードがない場合
ここからは補足になります。テストコードがないモジュール内でコマンド実行すると、
下記のようなメッセージが表示されます。
// モジュールを管理する親ディレクトリで実行したとき
~/projects/go/HelloPkgs $go test
go: go.mod file not found in current directory or any parent directory; see 'go help modules'
コメント