0
0

More than 1 year has passed since last update.

Go言語でunit testをしたい

Posted at

はじめに

最近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が空のときのテストもどんどん書いていくべきなのですが、今回はデモなので省略しました。

これで楽しくテストを書きながらプログラムを実装していきましょう。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0