【Go言語入門⑤】テストの実行

Go言語
目次

今回の内容

単体テストに対する Go の組み込みサポートにより、実行中のテストが容易になります。具体的には、命名規則、Go のtestingパッケージ、およびgo testコマンドを使用して、テストをすばやく作成して実行できます。

今回の内容は下記のチュートリアルの内容となります

過去の記事

下記の内容を実施している前提となりますのでご了承ください

テストコードを記述する

テストコードを記述する

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'
ぎゅう
WEBエンジニア
渋谷でWEBエンジニアとして働く。
LaravelとVue.jsをよく取り扱い、誰でも仕様が伝わるコードを書くことを得意とする。
先輩だろうがプルリクにコメントをして、リファクタしまくる仕様伝わるコード書くマン
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次
閉じる