最近シェルスクリプトでちょっとしたテストコードを書く機会が多いのでテストを支援するツールを書いてみました。シェルスクリプトのスキル不足な面もあり、色々と調べながら試行錯誤しながら書くことで良い学びの機会となった。
テストツールはBaut(Bash Unit test Tool)という名前でBash上で動作します。Bats[1]https://github.com/sstephenson/batsという便利なテストツールがあるけれど、Batsとは実行のアプローチは異なります。インターフェースは似ています、というか影響を受けています。
Bautの特徴は以下のような感じです。
- テストはただのBashスクリプトである。DSLも使用していないので、使い慣れたエディタで特別なモードも必要なく、すぐにテストを書き始められる。
- テストレポートなどカスタマイズしやすい。標準で2、3用意している。
- テストの出力が分かりやすい方かも。
echo
やprintf
で実行した結果が素直にレポートの結果で確認できる。 - Helperなど組み込みやすい。
テストツールとしては斬新で真新しい機能はないですが、ちょっとした機能確認に役立つかもというレベルのものです。まだ見直しも含め変更の可能性がありますが、とりあえず動くのでgithubにあげてます。
テストのサンプルは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#: @BeforeAll function setup_all() { echo "==> Called once at first" } #: @BeforeEach function setup() { export PATH=/usr/local/bin:"$PATH" } #: @Test(The usage should be displayed when command line options are invalid) function parse_cli_options() { run ./my.sh [[ "$result" =~ usage: ]] } #: @Test #: @Ignore function this_test_is_ignored() { echo "This test is ignored" } #: @AfterEach function teardown() { echo "# Clean up a test." } #: @AfterAll function teardown_all() { echo "==> Called once at last" } |
見ての通り、Bashスクリプトそのものです。
実行は以下。
1 2 3 4 5 6 7 8 9 10 11 |
$ baut run test_sample.sh 1 file, 1 test #1 /Users/guest/workspace/baut/test_sample.sh ==> Called once at first o The usage should be displayed when command line options are invalid # Clean up a test. ==> Called once at last 1 test, 1 ok, 0 failed, 0 skipped ? 1 file, 1 test, 1 ok, 0 failed, 0 skipped Time: 0 hour, 0 minute, 0 second |
さらに詳細な情報は以下から参照できます。
もし役に立つことがあれば。
コメント