シェルスクリプトの自動テストライブラリ shUnit2 を調べてみた

シェルスクリプトの自動テストツールをググってみたら、shUnit2を発見した。
早速かんたんに調べてみた。

shUnit2開発の背景

log4shの複数シェル対応を自動テストすることを目的として開発された。
JUnitと同様の方法で動作するように設計されている。

準備

1. shUnit2のダウンロード

wget -P ~/download http://shunit2.googlecode.com/files/shunit2-2.1.6.tgz

2. 解凍

tar -xzvf ~/download/shunit2-2.1.6.tgz

3. サンプル実行

~/download/shunit2-2.1.6/examples/equality_test.sh

テスト実行時の内部動作

shUnit2の内部動作は下記の通り。

  • 下記のコマンドで shunit2 が読み込まれると、その時点で定義されている関数で接頭辞が test である関数の名称がリストアップされる
  • oneTimeSetUp 関数が定義されていれば、それが実行される
  • リストアップされた各テスト関数について、下記が実行される
    • setUp 関数が定義されていれば、それが実行される
    • テスト関数が実行される
    • tearDown 関数が定義されていれば、それが実行される
  • oneTimeTearDown 関数が定義されていれば、それが実行される
. "$SHUNIT2_HOME"/src/shell/shunit2

テストコードの作成

例:

#!/bin/sh
# file: test/my_function_test.sh

# テスト対象の読み込み
. ../src/my_function.sh

oneTimeSetUp() {
:
}
oneTimeTearDown() {
:
}
setUp() {
:
}
tearDown() {
:
}

# テストケース
testMyFunction() {
  assertTrue "[ `myFunction 2` -eq 4 ]"
}

. "$SHUNIT2_HOME"/src/shunit2
#!/bin/sh
# file: src/my_function.sh

myFunction() {
  echo `expr $1 \* $1`
}