import "testing"

testingパッケージは、Goパッケージの自動テストをサポートします。これは「gotest」ユーティリティと合わせて使われることを前提にしており、どのような関数であっても実行を自動化できます。

func TestXxx(*testing.T)

「Xxx」は、テストルーチンを識別するために使用します。この名称は、どんな英数字文字列でも構いませんが、最初の文字にa-z(小文字アルファベット)は使えません。これらTestXxxルーチンは、テストするパッケージ内で宣言されていなければなりません。

func BenchmarkXxx(*testing.B)

上の形式の関数は、ベンチマークとみなされ、gotestに-benchmarksフラグを与えたときに実行されます。

簡単なベンチマーク関数は、次のようになります。

func BenchmarkHello(b *testing.B) {
    for i := 0; i < b.N; i++ {
        fmt.Sprintf("hello")
    }
}

このパッケージは、ベンチマーク関数が時間を計測するために充分な時間、実行されるようにb.Nの値を変更します。下が出力です。

testing.BenchmarkHello	500000	      4076 ns/op

この出力は、ループが500000回され、1回のループに付き4076nsかかったことを示しています。

ベンチマークの実行の前に、時間のかかるセットアップ処理を必要とするなら、次のようにしてタイマーを停止させることができます。

func BenchmarkBigLen(b *testing.B) {
    b.StopTimer()
    big := NewBig()
    b.StartTimer()
    for i := 0; i < b.N; i++ {
        big.Len()
    }
}

パッケージファイル

benchmark.go testing.go

Main関数

func Main(matchString func(pat, str string) (bool, os.Error), tests []InternalTest)

これは内部関数ですが、エクスポートされているのは、これがクロスパッケージであり、gotestの一部であるためです。

RunBenchmarks関数

func RunBenchmarks(matchString func(pat, str string) (bool, os.Error), benchmarks []InternalBenchmark)

これは内部関数ですが、エクスポートされているのは、これがクロスパッケージであり、gotestの一部であるためです。

B型

Bは、ベンチマーク関数に渡される型で、ベンチマークのタイミングを管理し、実行の繰り返し回数を取り決めます。

type B struct {
    N int
    // contains unexported fields
}

(*B) ResetTimer関数

func (b *B) ResetTimer()

ResetTimerは、タイマーを停止し、経過したベンチマーク時間をゼロに戻します。

(*B) SetBytes関数

func (b *B) SetBytes(n int64)

SetBytesは、一回の実行において処理されたバイト数を記録します。これが呼び出されると、ベンチマークはns/opとMB/sを報告します。

(*B) StartTimer関数

func (b *B) StartTimer()

StartTimerは、テストの時間の計測を開始します。この関数は、ベンチマークが開始する前に自動的に呼び出されますが、StopTimerを呼び出した後、この関数で再開させることもできます。

(*B) StopTimer関数

func (b *B) StopTimer()

StopTimerは、テストの時間の計測を停止します。複雑な初期化処理を行っている間の時間を計測したくないときに、タイマーを一時停止するために使用可能です。

BenchmarkResult型

ベンチマークの実行結果です。

type BenchmarkResult struct {
    N     int   // 繰り返し回数
    Ns    int64 // 総所要時間
    Bytes int64 // 処理された総バイト数
}

Benchmark関数

func Benchmark(f func(b *B)) BenchmarkResult

Benchmarkは、ひとつの関数をベンチマークします。 gotestを使わないカスタムベンチマークの作成に役立ちます。

(BenchmarkResult) NsPerOp関数

func (r BenchmarkResult) NsPerOp() int64

(BenchmarkResult) String関数

func (r BenchmarkResult) String() string

InternalBenchmark型

これは内部型ですが、エクスポートされているのは、これがクロスパッケージであり、gotestの一部であるためです。

type InternalBenchmark struct {
    Name string
    F    func(b *B)
}

InternalTest型

これは内部型ですが、エクスポートされているのは、これがクロスパッケージであり、gotestの一部であるためです。

type InternalTest struct {
    Name string
    F    func(*T)
}

T型

Tは、テスト関数に渡される型で、テストの状態を管理し、テストのログの書式化をサポートします。Logは実行中に蓄積され、完了時に標準エラー出力に吐かれます。

type T struct {
    // contains unexported fields
}

(*T) Error関数

func (t *T) Error(args ...interface{})

Errorは、Log()とFail()を呼び出すことと同じです。

(*T) Errorf関数

func (t *T) Errorf(format string, args ...interface{})

Errorfは、Logf()とFail()を呼び出すことと同じです。

(*T) Fail関数

func (t *T) Fail()

Failは、テスト関数でエラーがあったが実行は継続したことを記録します。

(*T) FailNow関数

func (t *T) FailNow()

FailNowは、テスト関数でエラーがあり、実行を終了したことを記録します。実行は次のテストの際に再開されます。

(*T) Failed関数

func (t *T) Failed() bool

Failedは、テスト関数にエラーがあったかどうかを返します。

(*T) Fatal関数

func (t *T) Fatal(args ...interface{})

Fatalは、Log()とFailNow()を呼び出すことと同じです。

(*T) Fatalf関数

func (t *T) Fatalf(format string, args ...interface{})

Fatalfは、Logf()とFailNow()を呼び出すことと同じです。

(*T) Log関数

func (t *T) Log(args ...interface{})

Logは、Print()と同じように、引数をデフォルトの書式で書式化し、テキストをエラーログに記録します。

(*T) Logf関数

func (t *T) Logf(format string, args ...interface{})

Logfは、Printf()と同じように、引数をそれぞれに指定した書式で書式化し、テキストをエラーログに記録します。