write ahead log

ロールフォワード用

golangで最低限のテストを書きたい

golangは触り始めたばかりで右も左もわからない状況なんだけれど,テストの書き方ぐらいは知っておこうかなと思う.

とはいえあんまり頑張ると途方もないので最低限に絞る.

テストされる側のプログラム
package main

func english() string {
    return "Hello, world"
}

func japanese() string {
    return "Hello, world"      /* <- ここがバグ */
    return "こんにちは、世界"
}

func chinese() string {
    return "你好,是世界"
}
テストする側のプログラム
package main

import (
    "testing"
)

func TestGreeting(t *testing.T) {
    if japanese() != "こんにちは、世界" {
        t.Errorf("Excepted %s, But %s.", "こんにちは、世界", japanese())
    }
    if chinese() != "你好,是世界" {
        t.Errorf("Excepted %s, But %s.", "你好,是世界", chinese())
    }
    if english() != "Hello, world" {
        t.Errorf("Excepted %s, But %s.", "Hello, world", english())
    }
}
テストに使うコマンド(標準で入ってる)
$ go test
--- FAIL: TestGreeting (0.00s)
        greeting_test.go:9: Excepted こんにちは、世界, But Hello, world.
FAIL
exit status 1
FAIL    _/C_/msys64/home/SASNUC_2/git/lab/gotest        0.140s
使いそうなメソッド
メソッド 説明
t.Logf 実行時の値を表示する
t.Errorf エラーメッセージを出す.テストの実行は止めない
t.Fatalf エラーメッセージを出す.テストの実行も止める

これだけあればとりあえずそれなりに書けるかと.

テストに対する考え方

公式に少し載っていました.

FAQ :テスト用のヘルパー関数がみあたりません
FAQ :アサート(assert)がない理由は?

個人的には肌に合う感じがします.
確認が必要で人手で行う必要のないものを自動化するのが自動テストの役割のはずですから.

正直テストは簡単なものならシェルスクリプトとかでも良いと思っている派なので.

複雑な事はしたくないというのが本音です.