0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DENSOAdvent Calendar 2021

Day 18

[Go]ローカル環境でのテスト自動実行スクリプトにより開発体験を向上する

Last updated at Posted at 2021-12-17

この記事は DENSO アドベントカレンダー 2021 の 18 日目の記事です。

Go で実装する際に使用している便利スクリプトを紹介します。
ファイルの編集保存の度にテストを自動実行し、色付けしたテスト結果を出力します。テストコマンド入力の煩わしさがなく、表示色で結果を判断できログを読む認知負荷が軽減します。コード編集に集中できるため、リファクタリング作業で重宝しています。

動作デモ

デモではアサーションの期待する結果を編集して保存しています。ターミナルでスクリプトを一度実行した後は、エディタ内に留まったまま随時テスト結果を確認できます。
Untitled.gif

準備

reflex (ファイル差分が生じたことを検知)と、gotest (テスト結果に色付け)をインストールします。

$ go install github.com/cespare/reflex@latest
$ go install github.com/rakyll/gotest@latest

スクリプト

シェルスクリプトと Makefile の2種類を紹介します。お好みで選んでください。

シェルスクリプト

プロジェクトのルートディレクトリにスクリプトを用意します。

test.sh
#!/bin/bash

cd "$(dirname "$0")" || exit 1

if [ -z "$1" ]; then
  reflex -r '\.go$' -- gotest ./... -v
else
  reflex -r '\.go$' -- gotest -run "$1" ./... -v
fi

chmod +x test.shで実行権限をつけておきます。

処理の内容は、拡張子.goファイルに差分が生じたら、その都度gotest ./... -vを実行します。特定のテスト関数のみテストするときは、引数にテスト関数名を渡すと-runつきで実行します。

$ ./test.sh

特定のテスト関数のみテストします。

$ ./test.sh TestDoSomething

Makefile

複数のスクリプトを1つのファイルで管理できるのでおすすめです。インデントがタブであることに注意。

makefile
.PHONY: test

FUNC=

test:
ifndef FUNC
	reflex -r '\.go$$' -- gotest ./... -v
else
	reflex -r '\.go$$' -- gotest -run $(FUNC) ./... -v
endif

全件テストします。

$ make test

特定のテスト関数のみテストします。

$ make test FUNC=TestDoSomething

終わりに

このツールのおかげでリファクタリングが楽しくて、ついつい時間が経つのを忘れそうになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?