go test
してますか。
標準テストライブラリの出力を見やすくするツール richgo を作ったので、紹介をば。
TL;DR
Goには公式でリッチなテストフレームワークがないですね。
思想[1][2]は好きなんですが、とはいえ出力の見づらさはなんとかならんものか・・・。
あまりにも見づらいので、go
をラップして、 test
の出力を無理やり色付けするツールを作りました。
インストール方法
おなじみ go get
go get -u github.com/kyoh86/richgo
使い方
richgo test ./...
他の機能を阻害することはないので go
のエイリアスとしてしまうのがおすすめです。
# alias go=richgo # おすすめしません
# go test ./... # おすすめしません
→改行が出力されないタイプのプログラムを走らせると、一向に出力されないという状態に陥って、
精神衛生上よろしくないのでお勧めできませんでした。
スタイルの設定変更
設定ファイルでスタイルを変えることもできます。
実行時に、次の順番で設定ファイルを読む仕様になっています。
${CWD}/.richstyle
${CWD}/.richstyle.yaml
${CWD}/.richstyle.yml
${GOPATH}/.richstyle
${GOPATH}/.richstyle.yaml
${GOPATH}/.richstyle.yml
${GOROOT}/.richstyle
${GOROOT}/.richstyle.yaml
${GOROOT}/.richstyle.yml
${HOME}/.richstyle
${HOME}/.richstyle.yaml
${HOME}/.richstyle.yml
環境変数に RICHGO_LOCAL=1
とすれば、カレントディレクトリの設定ファイル(${CWD}/.richstyle*
)だけを読み込むようになります。
設定ファイルのフォーマット
設定は、YAML形式で次のような形で記載します。
すべての項目は、設定しなければデフォルト/または先に読み込んだ設定ファイルの内容が反映されます。
# ラベルの見せ方
labelType: (long | short | none)
# ビルドログの見た目
buildStyle:
# 出力しない
hide: (true | false)
# 太字
bold: (true | false)
# 淡い字、または細い字
faint: (true | false)
# 斜体
italic: (true | false)
# アンダーライン
underline: (true | false)
# 点滅(ゆっくり)
blinkSlow: (true | false)
# 点滅(はやい)
blinkRapid: (true | false)
# 前景色と背景色を入れ替える
inverse: (true | false)
# 前景色と背景色を同色にする
conceal: (true | false)
# 取り消し線を引く
crossOut: (true | false)
frame: (true | false)
encircle: (true | false)
# アッパーライン
overline: (true | false)
# 文字前景色
foreground: (#xxxxxx | rgb(0-256,0-256,0-256) | rgb(0x00-0xFF,0x00-0xFF,0x00-0xFF) | (name of colors))
# 文字背景色
background: # Same format as `foreground`
# テスト開始ログの見た目
startStyle:
# Same format as `buildStyle`
# テスト通過ログの見た目
passStyle:
# Same format as `buildStyle`
# テスト失敗ログの見た目
failStyle:
# Same format as `buildStyle`
# テストスキップログの見た目
skipStyle:
# Same format as `buildStyle`
# テスト対象ファイル名の見た目
fileStyle:
# Same format as `buildStyle`
# エラーログ行番号の見た目
lineStyle:
# Same format as `buildStyle`
# 行ごと出力したくない行を、正規表現で指定
removals:
- (regexp)
ログの種類
設定ファイルのフォーマットに書いたように、 richgo
はテストの出力を一行ごとにカテゴライズして、
それぞれに独自のスタイルを設定しています。
-
ビルドログ
- ビルドに失敗したりすると出るログ
- 例:
# github.com/kyoh86/richgo/sample/buildfail sample/buildfail/buildfail_test.go:6: t.Foo undefined (type testing.T has no field or method Foo)
-
テスト開始ログ
- テスト関数の先頭や、
testing.T.Run
の先頭で表示される、テスト名のログ - 例:
=== RUN TestSampleOK/SubtestOK
- テスト関数の先頭や、
-
テスト通過ログ
- テストが通った時に表示されるログ
- 例:
---PASS: TestSampleOK/SubtestOK
-
テスト失敗ログ
- テストがコケた時に表示されるログ
- 例:
--- FAIL: TestSampleNG (0.00s) sample_ng_test.go:9: It's not OK... :(
-
テストスキップログ
- テストを
testing.T.Skip
でスキップさせたり、テストファイル(*_test.go
)がない時に表示されるログ - 例:
--- SKIP: TestSampleSkip (0.00s) sample_skip_test.go:6: ? github.com/kyoh86/richgo/sample/notest [no test files]
- テストを
ラベルの種類
各カテゴリのログには、左側にそれと分かるようにラベルを出力しています。
ラベルの見せ方も、次の3種類を選べます。
-
Long
- Build: "BUILD"
- Start: "START"
- Pass: "PASS"
- Fail: "FAIL"
- Skip: "SKIP"
-
Short
- Build: "!!"
- Start: ">"
- Pass: "o"
- Fail: "x"
- Skip: "-"
-
None
ラベルを表示しません。
デフォルト設定値
labelType: long
buildStyle:
bold: true
foreground: yellow
startStyle:
foreground: lightBlack
passStyle:
foreground: green
failStyle:
bold: true
foreground: red
skipStyle:
foreground: lightBlack
fileStyle:
foreground: cyan
lineStyle:
foreground: magenta
あとがき
goconvey
のようにリッチな出力をしてくれるテストフレームワークもありますが、やはり testing
パッケージだけで構成されたテストは見通しが良いものです。
アサーションばかりは辛いので、testify の assert
と require
だけは使っていますが・・・。
richgo
を使えば見た目の問題も解決できるので、ぜひ Go のポリシーに沿ったテストで素敵な Go ライフを。