はじめに
最近Go言語を最近初めてTDD的な個人開発を行いたかったので自分用のメモとしてGo言語のunittestの書き方をまとめました。
Go言語でのunittestの書き方
testファイルの作成
まずは、テストしたい関数と同階層に<ファイル名>_test.go
というファイルを作成しましょう。今回はHello.go
をテストするHello_test.go
を作成しました。
.
├── Hello.go
└── Hello_test.go
Hello_test.go
の記述
続いてテストコードを書きましょう。Hello()
に名前を渡すとHello, <名前>!
と帰ってくるプログラムをテストします。
Hello_test.go
package main
import (
"testing"
)
func TestHelloName_名前出力のテスト(t *testing.T) {
name := "abemaru"
want := "Hello, abemaru"
msg, err := Hello(name)
if msg != want || err != nil {
t.Errorf("Hello(%s) returns error: %v", name, err)
}
}
まずはテストを落とすために何もしない関数を作成します。(テスト失敗後にちゃんと実装しますよ!)
Hello.go
package main
func Hello(name string) (string, error) {
return name, nil
}
上記の状態でテストを実行します。コマンドはgo test
です。
% go test
--- FAIL: TestHelloName_名前出力のテスト (0.00s)
Hello_test.go:12: Hello(abemaru) returns error: <nil>
FAIL
exit status 1
FAIL hello 0.377s
ちゃんと落ちてくれました。
Hello()
の実装
ちゃんとテストが通るように実装します。
Hello.go
package main
func Hello(name string) (string, error) {
return "Hello, " + name, nil
}
変更を加えた後にまたgo test
を実行します。
% go test
PASS
ok hello 0.353s
おわりに
結構簡単にテストは実装はできそうですね。本来であれば、name
が空のときのテストもどんどん書いていくべきなのですが、今回はデモなので省略しました。
これで楽しくテストを書きながらプログラムを実装していきましょう。