テスト中、API などのリクエスト過多を防ぐために
Sleep
させたり、重い処理が始まったなど、テスト実行中に、その旨をユーザに知らせたい。
「"golang" テスト中にメッセージを表示させる」でググっても、ピンポイントで見つからないので自分のググラビリティとして。
TL; DR (今北産業)
- 重い処理や
Sleep
実行前にt.Log()
する。 - テスト実行時に
-v
を付けて実行する。(go test -v ./...
など) - Go v1.14 から対応している。
TS; DR
テスト実行時にオプション-vを忘れないこと
package main
import (
"testing"
"time"
)
func TestFoo(t *testing.T) {
t.Parallel()
t.Logf("重い処理を開始します:%v", t.Name())
for i := 0; i < 15; i++ {
time.Sleep(1 * time.Microsecond)
}
}
func TestBar(t *testing.T) {
t.Parallel()
t.Logf("重い処理を開始します:%v", t.Name())
for i := 0; i < 15; i++ {
time.Sleep(1 * time.Microsecond)
}
}
func TestBaz(t *testing.T) {
t.Parallel()
t.Logf("重い処理を開始します:%v", t.Name())
for i := 0; i < 15; i++ {
time.Sleep(1 * time.Microsecond)
}
}
// Output:
// === RUN TestFoo
// === PAUSE TestFoo
// === RUN TestBar
// === PAUSE TestBar
// === RUN TestBaz
// === PAUSE TestBaz
// === CONT TestFoo
// prog.go:11: 重い処理を開始します:TestFoo
// === CONT TestBaz
// prog.go:29: 重い処理を開始します:TestBaz
// === CONT TestBar
// prog.go:20: 重い処理を開始します:TestBar
// --- PASS: TestBaz (0.00s)
// --- PASS: TestBar (0.00s)
// --- PASS: TestFoo (0.00s)
// PASS
- オンラインで動作をみる @ GoPlayground
参考文献
- Issue #24929: "testing: stream t.Log output as it happens" | go | golang @ GitHub
- Fix: [release-branch.go1.14] testing: "reformat test chatty output" | CL 242057 | review @ googlesource.com
- "go test -v streaming output" @ dave.cheney.net
- "How do you print in a Go test using the “testing” package?" @ StackOverflow