Goのテスト入門
TDDをしたいのでテストを書いてみよう。
基本のテスト Hello world的なテスト
役に立たないけど、基本的なテスト
ファイル:main.go
import "fmt"
// テスト
func isOne(i int) bool {
if i == 1 {
return true
} else {
return false
}
}
func main() {
fmt.Println(isOne(1))
fmt.Println(isOne(0))
}
関数 isOneをテストしたい場合、テストファイルを作成する。ファイル名:main_test.goで作成する。
package main
//テスト
import "testing"
var Debug bool = false
func TestIsOne(t *testing.T) {
i := 1
if Debug {
t.Skip("スキップさせる")
}
v := IsOne(i)
if !v {
t.Errorf("%v != %v", i, 1)
}
}
IsOne関数をテストしたいので、TestIsOneを定義します。引数にtesting.Tパッケージを渡してあげます。
エラーの場合は、t.Errorでエラーを出力します。
エラーがなく処理が終わった場合は、okが出力されます。
テストの実行は以下のように入力します。
go test
成功の場合は以下のように出力されます。
$ go test -v
=== RUN TestIsOne
--- PASS: TestIsOne (0.00s)
PASS
ok goTest 0.232s
失敗した場合は以下のように出力されます。
$ go test
--- FAIL: TestIsOne (0.00s)
main_test.go:15: 0 != 1
FAIL
exit status 1
FAIL goTest 0.149s
基本のテストその2 パッケージのテスト
alibというディレクトリを作成して、alib.goファイルを作成する。
package alib
func Average(s []int) int {
total := 0
for _, i := range s {
total += i
}
return int(total / len(s))
}
Average関数をテストしたいので、テストファイルをalibディレクトリに作成する。
ファイル名:alib_test.go
package alib
import "testing"
var Debug bool = false
func TestAverage(t *testing.T) {
if Debug {
t.Skip("スキップします")
}
v := Average([]int{1, 2, 3, 4, 5})
if v != 3 {
t.Errorf("%v !~!= %v", v, 3)
}
}
テストを実行します。
go test ./alib
$ go test ./alib
ok goTest/alib 0.386s
基本のテストは以上です。
次回は、テスティングフレームワークtestifyを使ってみようと思います。
参考させていただいたサイト
【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)
golang初心者にはおすすめの教材です。