🐕

Go言語でテスト go test

2021/09/02に公開

(作成:2021.09.02)

go test はじめまして

golangにはgo testツールなる便利なものがあります。と、言い始めて本当に便利か?と疑問に思ったのは私だけでないはず。テストしたいだけなのに、たくさんのコードを書く必要があるからですね。しかし、こういう仕様なのだからしょうがない、まずは赤ちゃんに戻った気持ちで覚えるところから始めていただきたいと思います。

まずはtestしたい関数の作成から

まずは関数を適当に作成しましょう。

sum1.go
package calc

func Summarize(nums []int) int {
    var total int
    for _, num := range nums {
        total += num
    }
    return total
}

はい。単純にスライスに入っている整数を合計する関数です。packageはとりあえずcalcにしてあります。
それでは、テスト部分を書いていきましょう。

sum_test.go
package calc

import "testing"

func TestA(t *testing.T) {
    var nums []int = []int{1, 2, 3, 4, 5}
    if !(Summarize(nums) == 15) {
        t.Error(`miss`)
    }
}

ファイル名の最後を_test.goとしなければいけません。testingをインポートとしていますね。そしてテストロジックとなる関数名はTest***と始めなければいけません。TestAでもTestAbcdefgでも構いません。そして引数には*testing.Tを入れます。実行してみましょう。

go mod init
go mod tidy
go test


このように表示されれば成功です。IF文でtrueになればPASSと表示されるということです。複数のIF文を作成してもOKです。全てチェックされます。まずは、いろいろと試してみましょう。

2つテストする

先ほどは1つのファンクションをテストしましたが、2つのファンクションを1つのファイルに含めることができます。次のようにテストファイルを変更して、TestBを追加します。

sum_test.go
package calc

import "testing"

func TestA(t *testing.T) {
    var nums []int = []int{1, 2, 3, 4, 5}
    if !(Summarize(nums) == 15) {
        t.Error(`miss`)
    }
}

func TestB(t *testing.T) {
	var nums []int = []int{1, 2, 3, 4, 5, 6}
	if !(Summarize(nums) == 20) {
		t.Error(`6 miss`)
	}
}

実行しましょう。

go test


FAILと表示され失敗しました。TestBで期待する合計値を20と正しくない値にしたため、計算結果と異なりました。TestAのテスト結果も表示させるには、次のようにコマンド入力の際にオプション-vをつけます。

go test -v


ファンクションごとにテスト結果が表示されました。

Discussion