概要
最近開発したシェルスクリプトのテストツールとしてshellspecを活用している。
シェルスクリプトは、
- 処理が比較的高速
単体で並列化も可能 - 簡単
コマンド並べるだけ - 追加パッケージ不要
というメリットがあり、特にインフラ界隈ではしょっちゅう使用するものの、モジュール化しにくいので見通しが悪く、バグを作り込みやすい。
そして記述済みの部分に場当たり的に修正や機能追加を行ってブラックボックス化してしまうこともしばしば。
テストツールを使って、細かい処理毎に関数を設けてテストを繰り返すことで、品質の向上が期待できる。
また、リグレッションテストを容易にすることでリファクタリングのハードルを下げ、ブラックボックス化を抑止できる。
いざ使ってみたところ、テストツールに対する私の理解があまりなかったこともあって、テストの作成にかなり時間がかかってしまった。
ここでは、テストで確認したい内容の実現方法について自分用にまとめる。
When句で実施した処理の結果をコマンドで確認する。
When call/runで関数/コマンドを実行したあと、別のコマンドで結果を確認する場合。例えば、サブプロセスを立ち上げるシェルスクリプトを実行して、プロセスが存在しているか調べる。
Describe "コマンド結果確認"
check_ps(){
[[ $(pgrep -f subprocess.sh | wc -l) -gt 0 ]] && echo OK
}
It "サブプロセス起動"
When run ./start_subprocess.sh
The value $(check_ps) should eq "OK"
End
End
以下、おいおい追記していく