Goでテストを書こう 〜バブルソートのテスト〜
この前バブルソートについてまとめたので、ついでにバブルソートのテストコードを書きました。 anomalocaristan.hatenablog.com
ソースコードの全体
main.go
package main import ( "fmt" ) func main() { param := []int{5, 10, 4, 0, 2, 13, 17, 8, 20} BubbleSort(param) fmt.Println(param) } func BubbleSort(ele []int) []int { flag := true for flag { flag = false for i := 0; i < len(ele)-1; i++ { if ele[i] > ele[i+1] { flag = true ele[i], ele[i+1] = ele[i+1], ele[i] } } } return ele }
テストコードの全体
main_test.go
package main import ( "fmt" "testing" ) func TestBubbleSortInt(t *testing.T) { // 8要素の配列(数字)を渡す testArr := []int{5, 1, 0, 34, 23, 4, 9, 16} BubbleSort(testArr) // lengthが0のときはFatalエラー if len(testArr) < 1 { t.Fatalf("array length is 0") } // check max value if max(testArr) != testArr[len(testArr)-1] { t.Errorf("index %d is not max value", len(testArr)-1) } // check min value if min(testArr) != testArr[0] { t.Errorf("index 0 is not min value") } fmt.Print(testArr) } func max(s []int) int { max := s[0] for _, value := range s { if value > max { max = value } } return max } func min(s []int) int { min := s[0] for _, value := range s { if value < min { min = value } } return min }
テストコードの解説
まずは、コードの中からテストしたいfunctionを呼び出します。 このとき、必要に応じて引数を渡します。
testArr := []int{5, 1, 0, 34, 23, 4, 9, 16} BubbleSort(testArr)
で、テスト項目を書いていきます。
lengthが0の時のエラーを起こしたいときには、testArrにint[]{}
を代入するとOKです。
// lengthが0のときはFatalエラー if len(testArr) < 1 { t.Fatalf("array length is 0") }
最大値が配列の一番最後のIndexに入っているか?をチェックしたい。 でもIndexをハードコードしちゃうとテスト対象の配列が変わるたびにその部分を変えないといけないので
// これだとキツイ if testArr[7] != testArr[len(testArr)-1] { t.Errorf("index %d is not max value", len(testArr)-1) }
最大値を取るような関数を作ります
func max(s []int) int { max := s[0] for _, value := range s { if value > max { max = value } } return max }
で、こうじゃ!
// check max value if max(testArr) != testArr[len(testArr)-1] { t.Errorf("index %d is not max value", len(testArr)-1) } fmt.Print(testArr)
最小値を取れるような関数min()も定義。
func min(s []int) int { min := s[0] for _, value := range s { if value < min { min = value } } return min }
上で定義したものをコール。
// check min value if min(testArr) != testArr[0] { t.Errorf("index 0 is not min value") }
さいごに
本当は配列が二桁いったときに、一桁〜二桁の境でバグらないか?みたいなのとかも 確認すべきなんでしょうが、いったんここで終わりにします。