...

パッケージ testing

概要 ▾

testing パッケージは,Go パッケージの自動化テストで用います。 Xxx が小文字で始まっていない

func TestXxx(*testing.T)

形式の関数の実行を自動化する "go test" コマンドと組み合わせて使用​​することを意図しています。 関数名はテストルーチンを識別するのに役立ちます。

これらの関数内で,Error ,Fail ,または関連するメソッドを使用して失敗を知らせます。

新しいテストスイートを作成するには,ここで説明するように TestXxx 関数を含む _test.go で終わる名前のファイルを作成します。 テスト対象のファイルと同じパッケージにファイルを入れます。 このファイルは通常のパッケージビルドからは除外されますが, “go test” コマンドが実行されたときに含まれます。 詳細については, “go help test” と “go help testflag” を実行してください。

簡単なテスト関数は次のようになります。

func TestAbs(t *testing.T) {
    got := Abs(-1)
    if got != 1 {
        t.Errorf("Abs(-1) = %d; want 1", got)
    }
}

ベンチマーク

形式

func BenchmarkXxx(*testing.B)

の関数はベンチマークと見なされ, -bench フラグが指定されているときは "go test" コマンドによって実行されます。 ベンチマークは順番に実行されます。

テストフラグの説明については, https://golang.org/cmd/go/#hdr-Testing_flags を参照してください。

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

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

ベンチマーク関数はターゲットコードを b.N 回実行する必要があります。 ベンチマーク実行中,ベンチマーク関数が確実にタイミングを取れるよう十分長く持続するまで b.N が調整されます。 出力

BenchmarkHello    10000000    282 ns/op

は,ループがループあたり 282 ns の速度で 10000000 回実行されたことを意味します。

ベンチマークを実行する前に高価な設定が必要な場合は,タイマーをリセットすることができます。

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

ベンチマークで並列設定でパフォーマンスをテストする必要がある場合は, RunParallel ヘルパー関数を使用することができます。 このようなベンチマークは, go test -cpu フラグと一緒に使用することを目的としています。

func BenchmarkTemplateParallel(b *testing.B) {
    templ := template.Must(template.New("test").Parse("Hello, {{.}}!"))
    b.RunParallel(func(pb *testing.PB) {
        var buf bytes.Buffer
        for pb.Next() {
            buf.Reset()
            templ.Execute(&buf, "World")
        }
    })
}

パッケージはサンプルコードも実行し検証します。 関数の例には, "Output:" で始まり,テストの実行時に関数の標準出力と比較される最後の行のコメントが含まれることがあります。 (この比較では,先頭と末尾のスペースは無視されます。) これらは例の例です。

func ExampleHello() {
    fmt.Println("hello")
    // Output: hello
}

func ExampleSalutations() {
    fmt.Println("hello, and")
    fmt.Println("goodbye")
    // Output:
    // hello, and
    // goodbye
}

コメントプレフィックス "Unordered output:" は "Output:" に似ていますが,任意の行の順序と一致します。

func ExamplePerm() {
    for _, value := range Perm(4) {
        fmt.Println(value)
    }
    // Unordered output: 4
    // 2
    // 1
    // 3
    // 0
}

出力コメントのないサンプル関数はコンパイルされますが実行されません。

パッケージ,関数 F ,型 T ,および型 T のメソッド M の例を宣言する命名規則は,次のとおりです。

func Example() { ... }
func ExampleF() { ... }
func ExampleT() { ... }
func ExampleT_M() { ... }

パッケージ / 型 / 関数 / メソッドのための複数の例の関数は,名前に明確な接尾辞を付けることによって渡されるかもしれません。 接尾辞は小文字で始まる必要があります。

func Example_suffix() { ... }
func ExampleF_suffix() { ... }
func ExampleT_suffix() { ... }
func ExampleT_M_suffix() { ... }

テストファイル全体が, 1 つの関数例,少なくとも 1 つの他の関数,型,変数,または定数宣言を含み,テスト関数またはベンチマーク関数を含まない場合,例として提示されます。

スキップ

*T または *B の Skip メソッドを呼び出すと,実行時にテストまたはベンチマークをスキップできます。

func TestTimeConsuming(t *testing.T) {
    if testing.Short() {
        t.Skip("skipping test in short mode.")
    }
    ...
}

サブテストとサブベンチマーク

T と B の Run メソッドでは,別の関数を定義することなく,サブテストとサブベンチマークを定義できます。 これにより,テーブル駆動型ベンチマークや階層テストの作成などの用途が可能になります。 また,共通の設定と破棄コードを共有する方法も提供します。

func TestFoo(t *testing.T) {
    // <setup code>
    t.Run("A=1", func(t *testing.T) { ... })
    t.Run("A=2", func(t *testing.T) { ... })
    t.Run("B=1", func(t *testing.T) { ... })
    // <tear-down code>
}

各サブテストとサブベンチマークには一意の名前があります。 最上位テストの名前と Run に渡される一連の名前をスラッシュで区切って組み合わせたもので,曖昧さを解消するためのオプションの末尾シーケンス番号です。

-run および -bench コマンドラインフラグの引数は,テストの名前と一致する部分的な正規表現です。 サブテストなど,スラッシュで区切られた複数の要素を使用したテストでは,引数はそれ自体がスラッシュで区切られ,式は各 name 要素に順番に一致します。 部分一致を使うため,空の式は任意の文字列に一致します。 たとえば, "matching" は名前にこれが含まれることを意味します。

go test -run ''      # すべてのテストを実行します。
go test -run Foo     # "TestFooBar" のように "Foo" にマッチするトップレベルのテストを実行します。
go test -run Foo/A=  # "Foo" に一致するトップレベルのテストでは, "A=" に一致するサブテストを実行します。
go test -run /A=1    # すべてのトップレベルテストで, "A=1" に一致するサブテストを実行します。

サブテストは並列処理の制御にも使用できます。 親テストは,そのすべてのサブテストが完了して初めて完了します。 この例では,定義されている可能性のある他のトップレベルのテストに関係なく,すべてのテストが互いに並行して,かつ互いにのみ実行されます。

func TestGroupedParallel(t *testing.T) {
    for _, tc := range tests {
        tc := tc // capture range variable
        t.Run(tc.Name, func(t *testing.T) {
            t.Parallel()
            ...
        })
    }
}

競合検出プログラムが 8192 個の平行実行ルーチンを超えるとプログラムが強制終了されるため, -race フラグを設定して並列テストを実行するときは注意してください。

並列サブテストが完了するまで run は返されないため,一連の並列テストの後にクリーンアップする方法が渡されます。

func TestTeardownParallel(t *testing.T) {
    // この Run は並列テストが終了するまで戻りません。
    t.Run("group", func(t *testing.T) {
        t.Run("Test1", parallelTest1)
        t.Run("Test2", parallelTest2)
        t.Run("Test3", parallelTest3)
    })
    // <tear-down code>
}

Main

テストの前または後に,テストプログラムで追加の設定または破棄を行う必要がある場合があります。 どのコードがメインスレッドで実行されるかを制御することがテストに必要なこともあります。 これらおよび他のケースをサポートするには,テストファイルに以下の関数が含まれている場合,

func TestMain(m *testing.M)

生成されたテストはテストを直接実行する代わりに TestMain(m) を呼び出します。 TestMain はメインのゴルーチンで実行され, m.Run の呼び出しの周りに必要なセットアップとティアダウンを何でもすることができます。 それはそれから m.Run の結果で os.Exit を呼ぶべきです。 TestMain が呼び出されたとき, flag.Parse は実行されていません。 TestMain がテストパッケージのものも含めてコマンドラインフラグに依存している場合は, flag.Parse を明示的に呼び出す必要があります。

TestMain の簡単な実装は次のとおりです。

func TestMain(m *testing.M) {
	// TestMain がフラグを使用する場合は,ここで flag.Parse() を呼び出します。
	os.Exit(m.Run())
}

目次 ▾

func AllocsPerRun(runs int, f func()) (avg float64)
func CoverMode() string
func Coverage() float64
func Init()
func Main(matchString func(pat, str string) (bool, error), tests []InternalTest, benchmarks []InternalBenchmark, examples []InternalExample)
func RegisterCover(c Cover)
func RunBenchmarks(matchString func(pat, str string) (bool, error), benchmarks []InternalBenchmark)
func RunExamples(matchString func(pat, str string) (bool, error), examples []InternalExample) (ok bool)
func RunTests(matchString func(pat, str string) (bool, error), tests []InternalTest) (ok bool)
func Short() bool
func Verbose() bool
type B
    func (c *B) Error(args ...interface{})
    func (c *B) Errorf(format string, args ...interface{})
    func (c *B) Fail()
    func (c *B) FailNow()
    func (c *B) Failed() bool
    func (c *B) Fatal(args ...interface{})
    func (c *B) Fatalf(format string, args ...interface{})
    func (c *B) Helper()
    func (c *B) Log(args ...interface{})
    func (c *B) Logf(format string, args ...interface{})
    func (c *B) Name() string
    func (b *B) ReportAllocs()
    func (b *B) ReportMetric(n float64, unit string)
    func (b *B) ResetTimer()
    func (b *B) Run(name string, f func(b *B)) bool
    func (b *B) RunParallel(body func(*PB))
    func (b *B) SetBytes(n int64)
    func (b *B) SetParallelism(p int)
    func (c *B) Skip(args ...interface{})
    func (c *B) SkipNow()
    func (c *B) Skipf(format string, args ...interface{})
    func (c *B) Skipped() bool
    func (b *B) StartTimer()
    func (b *B) StopTimer()
type BenchmarkResult
    func Benchmark(f func(b *B)) BenchmarkResult
    func (r BenchmarkResult) AllocedBytesPerOp() int64
    func (r BenchmarkResult) AllocsPerOp() int64
    func (r BenchmarkResult) MemString() string
    func (r BenchmarkResult) NsPerOp() int64
    func (r BenchmarkResult) String() string
type Cover
type CoverBlock
type InternalBenchmark
type InternalExample
type InternalTest
type M
    func MainStart(deps testDeps, tests []InternalTest, benchmarks []InternalBenchmark, examples []InternalExample) *M
    func (m *M) Run() int
type PB
    func (pb *PB) Next() bool
type T
    func (c *T) Error(args ...interface{})
    func (c *T) Errorf(format string, args ...interface{})
    func (c *T) Fail()
    func (c *T) FailNow()
    func (c *T) Failed() bool
    func (c *T) Fatal(args ...interface{})
    func (c *T) Fatalf(format string, args ...interface{})
    func (c *T) Helper()
    func (c *T) Log(args ...interface{})
    func (c *T) Logf(format string, args ...interface{})
    func (c *T) Name() string
    func (t *T) Parallel()
    func (t *T) Run(name string, f func(t *T)) bool
    func (c *T) Skip(args ...interface{})
    func (c *T) SkipNow()
    func (c *T) Skipf(format string, args ...interface{})
    func (c *T) Skipped() bool
type TB

B.ReportMetric
B.RunParallel

パッケージファイル

allocs.go benchmark.go cover.go example.go match.go run_example.go testing.go

func AllocsPerRun 1.1

func AllocsPerRun(runs int, f func()) (avg float64)

AllocsPerRun は, f の呼び出し中の平均割り当て数を返します。 戻り値は float64 型ですが,常に整数値になります。

割り当て数を計算するために,関数は最初にウォームアップとして 1 回実行されます。 指定された実行回数にわたる平均割り当て数が測定されて返されます。

AllocsPerRun は,測定中に GOMAXPROCS を 1 に設定し,戻る前に復元します。

func CoverMode 1.8

func CoverMode() string

CoverMode は,テストカバレッジモードが何に設定されているかを報告します。 値は "set", "count" ,または "atomic" です。 テストカバレッジが有効になっていない場合,戻り値は空になります。

func Coverage 1.4

func Coverage() float64

Coverage は,現在のコードカバレッジを [0, 1] の範囲内の端数として報告します。 カバレッジが有効になっていない場合, Coverage は 0 を返します。

一連のテストケースを大量に実行する場合は,各テストケースの後に [カバレッジ] をチェックすると,どのテストケースで新しいコードパスが実行されているかを特定できます。 'go test -cover' および 'go tool cover' によって生成されたレポートに代わるものではありません。

func Init 1.13

func Init()

Init はテストフラグを登録します。これらのフラグは,テスト機能を実行する前に "go test" コマンドによって自動的に登録されるため, Init は "go test" を使用せずに Benchmark などの機能を呼び出す場合にのみ必要です。

Init は,既に呼び出されている場合は効果がありません。

func Main

func Main(matchString func(pat, str string) (bool, error), tests []InternalTest, benchmarks []InternalBenchmark, examples []InternalExample)

Main は, "go test" コマンドの実装の一部である内部関数です。 クロスパッケージであり, " 内部 " パッケージよりも前のものであるため,エクスポートされました。 これは "go test" では使用されなくなりましたが, Main を使用して "go test" をシミュレートする他のシステムでは可能な限り保持されますが,テストパッケージに新しい機能が追加されるため Main は更新できないことがあります。 "go test" をシミュレートするシステムは MainStart を使用するように更新する必要があります。

func RegisterCover 1.2

func RegisterCover(c Cover)

RegisterCover はテストのためのカバレッジデータアキュムレータを記録します。 注 : この関数はテストインフラストラクチャの内部にあり,変更される可能性があります。 Go 1 互換性ガイドラインではまだカバーされていません。

func RunBenchmarks

func RunBenchmarks(matchString func(pat, str string) (bool, error), benchmarks []InternalBenchmark)

内部関数ですが,クロスパッケージなのでエクスポートされます。 "go test" コマンドの実装の一部です。

func RunExamples

func RunExamples(matchString func(pat, str string) (bool, error), examples []InternalExample) (ok bool)

内部関数ですが,クロスパッケージなのでエクスポートされます。 "go test" コマンドの実装の一部です。

func RunTests

func RunTests(matchString func(pat, str string) (bool, error), tests []InternalTest) (ok bool)

内部関数ですが,クロスパッケージなのでエクスポートされます。 "go test" コマンドの実装の一部です。

func Short

func Short() bool

Short は, -test.short フラグが設定されているかどうかを報告します。

func Verbose 1.1

func Verbose() bool

Verbose は, -test.v フラグが設定されているかどうかを報告します。

type B

B はベンチマークのタイミングを管理し,実行する反復回数を指定するためにベンチマーク関数に渡される型です。

ベンチマーク関数が FailNow, Fatal, Fatalf, SkipNow, Skip ,または Skipf のいずれかのメソッドを返すか呼び出すと,ベンチマークは終了します。 これらのメソッドは,ベンチマーク関数を実行しているゴルーチンからのみ呼び出す必要があります。 Log や Error のバリエーションなどの他のレポート方法は,複数のゴルーチンから平行に呼び出すことができます。

テストと同様に,ベンチマークログは実行中に蓄積され,実行時に標準エラーにダンプされます。 テストとは異なり,ベンチマークログは常に出力され,ベンチマーク結果に影響を与える可能性のある出力を隠さないようにします。

type B struct {
    N int
    // エクスポートされていないフィールドがあります
}

func (*B) Error

func (c *B) Error(args ...interface{})

Error は Log の後に Fail を続けるのと同じです。

func (*B) Errorf

func (c *B) Errorf(format string, args ...interface{})

Errorf は Logf の後に Fail を続けるのと同じです。

func (*B) Fail

func (c *B) Fail()

Fail は,関数を失敗したものとしてマークしますが,実行は継続されます。

func (*B) FailNow

func (c *B) FailNow()

FailNow は,その関数に失敗したことをマークし, runtime.Goexit (現在のゴルーチン内のすべての遅延呼び出しを実行します) を呼び出すことによってその実行を停止します。 実行は次のテストまたはベンチマークで続行されます。 FailNow は,テスト中に作成された他のゴルーチンからではなく,テストまたはベンチマーク関数を実行しているゴルーチンから呼び出す必要があります。 FailNow を呼び出しても,これらの他のルーチンは停止しません。

func (*B) Failed

func (c *B) Failed() bool

Faield は,関数が失敗したかどうかを報告します。

func (*B) Fatal

func (c *B) Fatal(args ...interface{})

Fatal は Log の後に FailNow を続けたものと同じです。

func (*B) Fatalf

func (c *B) Fatalf(format string, args ...interface{})

Fatalf は Logf の後に FailNow を続けたものと同じです。

func (*B) Helper 1.9

func (c *B) Helper()

Helper は,呼び出し側の関数をテストヘルパー関数としてマークします。 ファイルと行の情報を表示するとき,その関数はスキップされます。 Helper は複数のゴルーチンから平行に呼ばれるかもしれません。

func (*B) Log

func (c *B) Log(args ...interface{})

Log は, Println と同様に,デフォルトのフォーマットを使用して引数をフォーマットし,そのテキストをエラーログに記録します。 テストの場合,テキストはテストが失敗した場合,または -test.v フラグが設定されている場合にのみ表示されます。 ベンチマークの場合,パフォーマンスが -test.v フラグの値に依存するのを避けるために,テキストは常に表示されます。

func (*B) Logf

func (c *B) Logf(format string, args ...interface{})

Logf は, Printf と同様の形式に従って引数をフォーマットし,そのテキストをエラーログに記録します。 渡されない場合,最後の改行が追加されます。 テストの場合,テキストはテストが失敗した場合,または -test.v フラグが設定されている場合にのみ表示されます。 ベンチマークの場合,パフォーマンスが -test.v フラグの値に依存するのを避けるために,テキストは常に表示されます。

func (*B) Name 1.8

func (c *B) Name() string

Name は,実行中のテストまたはベンチマークの名前を返します。

func (*B) ReportAllocs 1.1

func (b *B) ReportAllocs()

ReportAllocs はこのベンチマークの malloc 統計を有効にします。 これは -test.benchmem の設定と同じですが, ReportAllocs を呼び出すベンチマーク関数にのみ影響します。

func (*B) ReportMetric 1.13

func (b *B) ReportMetric(n float64, unit string)

ReportMetric は,報告されたベンチマーク結果に "n ユニット " を追加します。メトリックが反復ごとの場合,呼び出し元は b.N で除算し,慣例により単位は "/op" で終わる必要があります。 ReportMetric は,同じユニットに対して以前に報告された値を上書きします。ユニットが空の文字列の場合,またはユニットに空白が含まれている場合, ReportMetric はパニックを起こします。ユニットがベンチマークフレームワーク自体によって通常報告されるユニット ("allocs/op" など) である場合, ReportMetric はそのメトリックをオーバーライドします。 "ns/op" を 0 に設定すると,その組み込みメトリックが抑制されます。

コード:

// これは,特定のアルゴリズム ( この場合は並べ替え ) に関連するカスタムベンチマークメトリックをレポートします。
testing.Benchmark(func(b *testing.B) {
    var compares int64
    for i := 0; i < b.N; i++ {
        s := []int{5, 4, 3, 2, 1}
        sort.Slice(s, func(i, j int) bool {
            compares++
            return s[i] < s[j]
        })
    }
    // このメトリックは操作ごとであるため, b.N で除算し, "/op" 単位として報告します。
    b.ReportMetric(float64(compares)/float64(b.N), "compares/op")
})

func (*B) ResetTimer

func (b *B) ResetTimer()

ResetTimer は,経過したベンチマーク時間とメモリ割り当てカウンターをゼロにし,ユーザーから報告されたメトリックを削除します。タイマーが実行されているかどうかには影響しません。

func (*B) Run 1.7

func (b *B) Run(name string, f func(b *B)) bool

与えられた名前のサブベンチマークとしてベンチマーク f を実行します。 失敗したかどうかを報告します。

サブベンチマークは他のベンチマークと同じです。 Run を少なくとも 1 回呼び出すベンチマークは,それ自体は測定されず, N=1 で 1 回呼び出されます。

func (*B) RunParallel 1.3

func (b *B) RunParallel(body func(*PB))

RunParallel はベンチマークを並列に実行します。 それは複数のゴルーチンを作成し,それらの間に b.N の繰り返しを分配します。 ゴルーチンの数はデフォルトで GOMAXPROCS になります。 CPU に依存しないベンチマークの並列処理を増やすには, RunParallel の前に SetParallelism を呼び出します。 RunParallel は通常, go test -cpu フラグと一緒に使用されます。

body 関数は各 goroutine で実行されます。 ゴルーチンローカルな状態を設定してから, pb.Next が false を返すまで繰り返します。 StartTimer, StopTimer ,または ResetTimer 関数はグローバルに影響するため,使用しないでください。 Run も呼び出さないでください。

コード:

// 1 つのオブジェクトで text/template.Template.Execute の並列ベンチマーク。
testing.Benchmark(func(b *testing.B) {
    templ := template.Must(template.New("test").Parse("Hello, {{.}}!"))
    // RunParallel は GOMAXPROCS ゴルーチンを作成し,それらの間で作業を分配します。
    b.RunParallel(func(pb *testing.PB) {
        // 各ゴルーチンには自分自身の bytes.Buffer があります。
        var buf bytes.Buffer
        for pb.Next() {
            // ループ本体は,すべてのゴルーチンで合計 b.N 回実行されます。
            buf.Reset()
            templ.Execute(&buf, "World")
        }
    })
})

func (*B) SetBytes

func (b *B) SetBytes(n int64)

SetBytes は, 1 回の操作で処理されたバイト数を記録します。 これが呼び出されると,ベンチマークは ns/op と MB/s を報告します。

func (*B) SetParallelism 1.3

func (b *B) SetParallelism(p int)

SetParallelism は, RunParallel によって使用されるゴルーチンの数を p*GOMAXPROCS に設定します。 通常, CPU バウンドのベンチマークでは SetParallelism を呼び出す必要はありません。 p が 1 より小さい場合,この呼び出しは効果がありません。

func (*B) Skip 1.1

func (c *B) Skip(args ...interface{})

Skip は, Log の後に SkipNow を続けたものと同じです。

func (*B) SkipNow 1.1

func (c *B) SkipNow()

SkipNow はテストがスキップされたものとしてマークし, runtime.Goexit を呼び出してテストの実行を停止します。 テストが失敗し (エラー,エラー,失敗を参照) ,スキップされた場合でも,テストは失敗したと見なされます。 実行は次のテストまたはベンチマークで続行されます。 FailNow もご覧ください。 SkipNow は,テスト中に作成された他のゴルーチンからではなく,テストを実行しているゴルーチンから呼び出される必要があります。 SkipNow を呼び出しても,これらの他のルーチンは停止しません。

func (*B) Skipf 1.1

func (c *B) Skipf(format string, args ...interface{})

Skipf は, Logf の後に SkipNow を続けたものと同じです。

func (*B) Skipped 1.1

func (c *B) Skipped() bool

Skipped は,テストがスキップされたかどうかを示します。

func (*B) StartTimer

func (b *B) StartTimer()

StartTimer は,テストの計時を開始します。この関数は,ベンチマークの開始前に自動的に呼び出されますが, StopTimer の呼び出し後にタイミングを再開するためにも使用できます。

func (*B) StopTimer

func (b *B) StopTimer()

StopTimer はテストの計時を停止します。 これは,測定したくない複雑な初期化を実行している間,タイマーを一時停止するために使用できます。

type BenchmarkResult

ベンチマークの結果

type BenchmarkResult struct {
    N         int           // 繰り返し数
    T         time.Duration // かかった合計時間。
    Bytes     int64         // 1 回の繰り返しで処理されたバイト数
    MemAllocs uint64        // メモリ割り当ての総数。; added in Go 1.1
    MemBytes  uint64        // 割り当てられた合計バイト数。; added in Go 1.1

    // Extra は, ReportMetric によって報告された追加のメトリックを記録します。
    Extra map[string]float64 // Go 1.13
}

func Benchmark

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

Benchmark は, 1 つの機能をベンチマークします。 "go test" コマンドを使用しないカスタムベンチマークを作成するのに役立ちます。

f がテストフラグに依存する場合, Benchmark を呼び出す前および flag.Parse を呼び出す前に, Init を使用してこれらのフラグを登録する必要があります。

f が Run を呼び出すと,結果は, Run を呼び出さないすべてのサブベンチマークを 1 つのベンチマークで順番に実行した推定値になります。

func (BenchmarkResult) AllocedBytesPerOp 1.1

func (r BenchmarkResult) AllocedBytesPerOp() int64

AllocedBytesPerOp は, "B/op" メトリックを返します。これは, r.MemBytes / r.N として計算されます。

func (BenchmarkResult) AllocsPerOp 1.1

func (r BenchmarkResult) AllocsPerOp() int64

AllocsPerOp は, "allocs/op" メトリックを返します。これは, r.MemAllocs / r.N として計算されます。

func (BenchmarkResult) MemString 1.1

func (r BenchmarkResult) MemString() string

MemString は 'go test' と同じ形式で r.AllocedBytesPerOp と r.AllocsPerOp を返します。

func (BenchmarkResult) NsPerOp

func (r BenchmarkResult) NsPerOp() int64

NsPerOp は "ns/op" メトリックを返します。

func (BenchmarkResult) String

func (r BenchmarkResult) String() string

文字列は,ベンチマーク結果の概要を返します。 https://golang.org/design/14313-benchmark-format のベンチマーク結果行形式に従いますが,ベンチマーク名は含まれません。追加のメトリックは,同じ名前の組み込みメトリックをオーバーライドします。文字列には, MemString によって報告されるため, allocs/op または B/op は含まれません。

type Cover 1.2

表紙はテストカバレッジチェックに関する情報を記録します。 注 : この構造体はテストインフラストラクチャの内部にあり,変更される可能性があります。 Go 1 互換性ガイドラインではまだカバーされていません。

type Cover struct {
    Mode            string
    Counters        map[string][]uint32
    Blocks          map[string][]CoverBlock
    CoveredPackages string
}

type CoverBlock 1.2

CoverBlock は, 1 つの基本ブロックのカバレッジデータを記録します。 エディタの場合と同様に,フィールドには 1 から始まるインデックスが付けられます。 たとえば,ファイルの開始行は 1 番です。 列はバイト単位で測定されます。 注 : この構造体はテストインフラストラクチャの内部にあり,変更される可能性があります。 Go 1 互換性ガイドラインではまだカバーされていません。

type CoverBlock struct {
    Line0 uint32 // ブロック開始の行番号
    Col0  uint16 // ブロック開始の列番号
    Line1 uint32 // ブロック終了の行番号
    Col1  uint16 // ブロック終了の列番号
    Stmts uint16 // このブロックに含まれるステートメントの数
}

type InternalBenchmark

内部型ですが,クロスパッケージなのでエクスポートされます。 "go test" コマンドの実装の一部です。

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

type InternalExample

type InternalExample struct {
    Name      string
    F         func()
    Output    string
    Unordered bool // Go 1.7
}

type InternalTest

内部型ですが,クロスパッケージなのでエクスポートされます。 "go test" コマンドの実装の一部です。

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

type M 1.4

M は,実際のテストを実行するために TestMain 関数に渡される型です。

type M struct {
    // エクスポートされていないフィールドがあります
}

func MainStart 1.8

func MainStart(deps testDeps, tests []InternalTest, benchmarks []InternalBenchmark, examples []InternalExample) *M

MainStart は 'go test' によって生成されたテストで使用するためのものです。 これは直接呼び出されることを意図しておらず, Go 1 互換性文書の対象ではありません。 リリースごとに署名が変わる可能性があります。

func (*M) Run 1.4

func (m *M) Run() int

テストを実行します。os.Exit に渡す終了コードを返します。

type PB 1.3

PB は,並列ベンチマークを実行するために RunParallel によって使用されます。

type PB struct {
    // エクスポートされていないフィールドがあります
}

func (*PB) Next 1.3

func (pb *PB) Next() bool

Next は,実行する反復がまだあるかどうかを報告します。

type T

T はテスト状態を管理しフォーマットされたテストログをサポートするために Test 関数に渡される型です。 ログは実行中に蓄積され,実行されると標準出力にダンプされます。

その Test 関数が FailNow, Fatal, Fatalf, SkipNow, Skip ,または Skipf のいずれかのメソッドを返すか呼び出すと,テストは終了します。 これらのメソッドは, Parallel メソッドと同様に, Test 関数を実行しているゴルーチンからのみ呼び出す必要があります。

Log や Error のバリエーションなどの他のレポート方法は,複数のゴルーチンから平行に呼び出すことができます。

type T struct {
    // エクスポートされていないフィールドがあります
}

func (*T) Error

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

Error は Log の後に Fail を続けるのと同じです。

func (*T) Errorf

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

Errorf は Logf の後に Fail を続けるのと同じです。

func (*T) Fail

func (c *T) Fail()

Fail は,関数を失敗したものとしてマークしますが,実行は継続されます。

func (*T) FailNow

func (c *T) FailNow()

FailNow は,その関数に失敗したことをマークし, runtime.Goexit (現在のゴルーチン内のすべての遅延呼び出しを実行します) を呼び出すことによってその実行を停止します。 実行は次のテストまたはベンチマークで続行されます。 FailNow は,テスト中に作成された他のゴルーチンからではなく,テストまたはベンチマーク関数を実行しているゴルーチンから呼び出す必要があります。 FailNow を呼び出しても,これらの他のルーチンは停止しません。

func (*T) Failed

func (c *T) Failed() bool

Faield は,関数が失敗したかどうかを報告します。

func (*T) Fatal

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

Fatal は Log の後に FailNow を続けたものと同じです。

func (*T) Fatalf

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

Fatalf は Logf の後に FailNow を続けたものと同じです。

func (*T) Helper 1.9

func (c *T) Helper()

Helper は,呼び出し側の関数をテストヘルパー関数としてマークします。 ファイルと行の情報を表示するとき,その関数はスキップされます。 Helper は複数のゴルーチンから平行に呼ばれるかもしれません。

func (*T) Log

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

Log は, Println と同様に,デフォルトのフォーマットを使用して引数をフォーマットし,そのテキストをエラーログに記録します。 テストの場合,テキストはテストが失敗した場合,または -test.v フラグが設定されている場合にのみ表示されます。 ベンチマークの場合,パフォーマンスが -test.v フラグの値に依存するのを避けるために,テキストは常に表示されます。

func (*T) Logf

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

Logf は, Printf と同様の形式に従って引数をフォーマットし,そのテキストをエラーログに記録します。 渡されない場合,最後の改行が追加されます。 テストの場合,テキストはテストが失敗した場合,または -test.v フラグが設定されている場合にのみ表示されます。 ベンチマークの場合,パフォーマンスが -test.v フラグの値に依存するのを避けるために,テキストは常に表示されます。

func (*T) Name 1.8

func (c *T) Name() string

Name は,実行中のテストまたはベンチマークの名前を返します。

func (*T) Parallel

func (t *T) Parallel()

Parallel は,このテストが他の並列テストと並列に (そしてそれとのみ) 実行されることを示します。 -test.count または -test.cpu を使用してテストを複数回実行した場合, 1 つのテストの複数のインスタンスが互いに並行して実行されることはありません。

func (*T) Run 1.7

func (t *T) Run(name string, f func(t *T)) bool

run は, name という t のサブテストとして f を実行します。 これは f を別の goroutine で実行し, f が戻るか,または t.Parallel を呼び出して並列テストになるまでブロックします。 f が成功した (または少なくとも t.Parallel を呼び出す前に失敗しなかった) かどうかをレポートします。

Run は複数のゴルーチンから平行に呼び出されることがありますが,そのような呼び出しはすべて, t の外部テスト関数が戻る前に戻る必要があります。

func (*T) Skip 1.1

func (c *T) Skip(args ...interface{})

Skip は, Log の後に SkipNow を続けたものと同じです。

func (*T) SkipNow 1.1

func (c *T) SkipNow()

SkipNow はテストがスキップされたものとしてマークし, runtime.Goexit を呼び出してテストの実行を停止します。 テストが失敗し (エラー,エラー,失敗を参照) ,スキップされた場合でも,テストは失敗したと見なされます。 実行は次のテストまたはベンチマークで続行されます。 FailNow もご覧ください。 SkipNow は,テスト中に作成された他のゴルーチンからではなく,テストを実行しているゴルーチンから呼び出される必要があります。 SkipNow を呼び出しても,これらの他のルーチンは停止しません。

func (*T) Skipf 1.1

func (c *T) Skipf(format string, args ...interface{})

Skipf は, Logf の後に SkipNow を続けたものと同じです。

func (*T) Skipped 1.1

func (c *T) Skipped() bool

Skipped は,テストがスキップされたかどうかを示します。

type TB 1.9

TB は T と B に共通のインターフェースです。

type TB interface {
    Error(args ...interface{})
    Errorf(format string, args ...interface{})
    Fail()
    FailNow()
    Failed() bool
    Fatal(args ...interface{})
    Fatalf(format string, args ...interface{})
    Log(args ...interface{})
    Logf(format string, args ...interface{})
    Name() string
    Skip(args ...interface{})
    SkipNow()
    Skipf(format string, args ...interface{})
    Skipped() bool
    Helper()
    // contains filtered or unexported methods
}

サブディレクトリ

名前 概要
..
iotest iotest パッケージは,主にテストで有用な Reader と Writer を実装します。
quick quick パッケージは,ブラックボックステスト用の便利関数を実装します。