自分が作った関数が正しく動くか調べるのにテストコードというものがある。

以前、整数が偶数ならtrue、奇数ならfalseを返すJudgeEo関数を作ったが、それをテストしてみる。

まず、以前コードを記載したryoko/func.goファイルと同じ階層に新規ファイルを作成する。

ここでは名前をryoko/func_test.goと名付ける。func_test.goに下記のコードを入力して実行する。

package ryoko

import "testing"

func TestJudgeEo(t *testing.T) {
var res bool
var i int
i = 5
res = JudgeEo(i)
if res == true {
t.Error("失敗")
}
}

TestJudgeEo(t *testing.T)のTestはJidgeEoを判定する関数という意味で、判定したい関数の前につける。()内はTest関数の場合は、(t *testing.T)のように記載することが決まっている。

※(t *testing.T)のtの後はスペースを一つ入れて*が続く。

今回の結果をresという変数にし、trueかfalseのbool値なので、var res boolとし、偶数か奇数かを入れる変数iをvar i intで記載する。ここで、i=5としてみる。これは奇数なので、falseと表示させたい。ここで結果resがtrueと返ってきたら、JudgeEo関数に間違いがあったことになる

上記をifを使って表すと、if res == true { t.Error("失敗")}となる。

これを実行すると、下記のようにokと返ってくるのでJudgeEo関数に間違いはなかったことがわかる。

ok2

※テストさせる場合は、テストしたい関数の成功ではなく失敗の結果が表示されるようにする。

また、テストする場合は、自分のおもいつく限りのケースを考えなければならない。

先ほどは奇数の場合を見たので、残りに偶数の場合がある。

その場合は、上記のコードの続きに下記のコードを追加する。

 i = 6
res = JudgeEo(i)
if res == false {
t.Error("失敗")
}

i=6であれば、偶数なのでtrueという表示になるはずである。これが、falseとなったら、JudeEo関数に間違いがあることになる。これを同じようにif文で表し、実行すると、下記のようにokが出てきてJudeEo関数に間違いがなかったことがわかる。

ok3

※全ての関数がテストを作れる訳ではない。作れない場合は、放っておくしかない。

※コードを公開する場合はテストコードも公開する。

最終的に作ったコードを下記に記載する。

package ryoko

import "testing"

func TestJudgeEo(t *testing.T) {
var res bool
var i int
i = 5
res = JudgeEo(i)
if res == true {
t.Error("失敗")
}

i = 6
res = JudgeEo(i)
if res == false {
t.Error("失敗")
}
}

ちなみにテストを意図的に失敗させた時は下記のような表示になる。

false1