11章 テスト

なかなか記事を書く習慣が身につかず飛び飛びになってしまいますし、そもそも網羅的に書くべきなのかどうかも分かりませんが、気分・心理状態次第になってしまいそうです。

11.2.5 効果的なテストの作成

テストも優れたユーザーインターフェースを提供しようというお話でした。

words := strings.Split("a:b:c", ":")
assertEqual(len(words), 3)

assertEqualのような関数を自分で作ってpanicで爆発するのではなく

func TestSplit(t *testing.T) {
    s, sep := "a:b:c", ":"
    words := strings.Split(s, sep)
    if got, want := len(words), 3; got != want {
        t.Errorf("Split(%q, %q returned %d words, want %d",
            s, sep, got, want)
    }
}

このようにしてわかりやすいエラーメッセージを提供して、他の次のテストも実行されるようにとのことです。

11.2.6 脆弱なテストを避ける

プログラムが正しく変更されたのにも関わらず、テストが失敗してしまう場合、そのテストは「脆弱だ」というみたいです。

対処法として、内部の関数ではなくインターフェースをテストすることや、出力が複雑なら本質を抽出するらしいです。