go1.5でテスト作成

概要

go言語でのテスト方法を調べるために、Goによるテスト例を参考にして、テストを作成しました。

作成するファイルは、テストコード(gotest_test.go)と被テストコード(gotest.go)です。パッケージ名はgotestです。作成する場所(ディレクトリ)はどこでもOKです。

手順

以下の手順で作成します。

  1. パッケージを作成する
  2. テストコードを作成する
  3. 被テストコードを作成する
  4. テストを実行する

テスト用のファイルの構成です。

$ tree gotest
gotest
├── gotest.go
└── gotest_test.go

1. パッケージを作成する

$ mkdir gotest

2. テストコードを作成する

テストコードには規約があります。

  • ファイル名は必ず_test.goをつける。
  • testingというパッケージをimportする。
  • テスト関数名の先頭にTestをつける。
  • テスト関数TestXxx()にパラメータtesting.Tをつける。
  • テスト関数名func TestXxx(t *testing.T)のXxxには任意の英数字を使うことができる。ただし、小文字はNG
  • テスト結果は、testing.TのError、Errorf、FailNow、Fatal、FatalIfメソッドで出力する。
  • テストコードは書かれた順番に実行される。
$ cat gotest_test.go
package gotest

import (
    "testing"
)

func Test_Division_1(t *testing.T) {

    if i, e := Division(6, 2); i != 3 || e != nil { //try a unit test on function
        t.Error("除算関数のテストが通りません") // もし予定されたものでなければエラーを発生させま
す。
    } else {
        t.Log("はじめのテストがパスしました") //記録したい情報を記録します
    }
}

3. 被テストコードを作成する

package gotest

import (
    "errors"
)

func Division(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("除数は0以外でなければなりません")
    }

    return a / b, nil
}

4. テストを実行する

$ cd gotest
$ go test
PASS
ok  	_/パス.../gotest	0.085s

カバレッジを求める

テストを実施する場合、コードのすべてのパスをテストしているかどうかカバレッジを調べることがよくあります。

go言語では、テスト実行に-coverオプションを追加するとカバレッジが出力されます。

$ go test -cover
PASS
coverage: 66.7% of statements
ok  	_/パス.../gotest	0.085s

go tool coverを使うとカバレッジを可視化できます。

ファイル出力したテスト結果をツールに入力すると、ブラウザにカバレッジが出力されます。

$ go test -coverprofile=cover.out gotest
--- FAIL: Test_Division_2 (0.00s)
	gotest_test.go:18: パスしません
FAIL
coverage: 66.7% of statements
FAIL	gotest	0.007s

$ go tool cover -html=cover.out

日本語が文字化けしている...

f:id:unokun3:20150914061658p:plain

参考資料