たくあんポリポリ

勉強したことを載せていきます。最近、技術系の記事はZennに書いています。(https://zenn.dev/chittai)

【Go】Goでのテストの書き方と実行方法

Goでは標準テストパッケージが提供されています。この記事では、テストするために勉強したことをまとめます。

テストの準備

下記を参考に。
golang.org
golang.org

まずは、下記のルールにそってファイルを準備をします。

  • テストしたいメソッドが書かれているファイルを作成する

hellotest.go

func HelloWorld() (bool, error) {
	if _, err := fmt.Println("HelloWorld"); err != nil {
		return true, errors.New("Error")
	}
	return true, nil
}
  • テスト用のメソッドが書かれているファイルを作成する。テストしたいメソッドが書かれているファイル名に_testをつける

"testing"をimportするのを忘れないようにしてください。

hellotest_test.go

func TestHelloWorld(t *testing.T) {
	fmt.Println("testtest")
	if _, err := HelloWorld(); err != nil {
		t.Error()
	}
}

テストの書き方

hellotest_test.goはテストメソッドを記述します。これはfunc TestXxx(*testing.T)このようなルールで記述してください。Testが先頭に来ることと、そのあとの単語は大文字から始めてください。

そして、テストメソッドの中でテストをしたいメソッドを呼び出し、エラー処理を書くことで完了です。そのため、メソッドを書くときはerrorを返り値を持つとテストの確認がしやすいです。

テストの実行方法

go test をコンソールから実行してください。そうすると、xxx_test.goで書いた処理が呼び出されます。

PASS
ok      github.com/chittai/test 0.006s

テストのカバレッジの確認

要は、書いたコードに対して、テストが実行されているコードがどの程度あるのかを確認します。go test -coverを実行すると標準出力から確認することができます。ただ、これだと、どこのコードが実行されていて、どこのコードが実行されていないのかわからないままです。

PASS
coverage: 9.1% of statements
ok      github.com/chittai/test 0.006s

なので、下記コマンドを実行します。

  1. go test -coverprofile=cover.out ./
  2. go tool cover -html=cover.out


そうすると、下記のような画面が表示され、どのコードがテストされてどのコードがテストされていないのかがわかります。
f:id:c_taquna:20190622015435p:plain

感想

とりあえず、テストツールの使い方をまとめました。あとは、もう少し掘り下げられる要素がありそうなので調べたタイミングで書いていきたいなと思います。