shunit2 – shUnit2 – xUnit based unit testing for Unix shell scripts – Google Project HostingというシェルスクリプトのUnitテストツールがあります。
ダウンロードして、使ってみました。Helloという文字列を表示するプログラムについて動作確認をしてみています。先に手順をざっと書くと次の通り。
$ mkdir -p workspace/bash/shUnit
$ cd workspace/bash/shUnit
$ wget http://shunit2.googlecode.com/files/shunit2-2.1.5.tgz
$ tar zxvf shunit2-2.1.5.tgz
$ mkdir src
$ vi src/Hello.sh
$ vi src/testHello.sh
$ chmod 755 src/*.sh
$ tree .
.
├── shunit2-2.1.5
(略)
└── src
├── Hello.sh
└── testHello.sh
$ cd src
$ testHello.sh
testHello
$ cd workspace/bash/shUnit
$ wget http://shunit2.googlecode.com/files/shunit2-2.1.5.tgz
$ tar zxvf shunit2-2.1.5.tgz
$ mkdir src
$ vi src/Hello.sh
$ vi src/testHello.sh
$ chmod 755 src/*.sh
$ tree .
.
├── shunit2-2.1.5
(略)
└── src
├── Hello.sh
└── testHello.sh
$ cd src
$ testHello.sh
testHello
Ran 1 test.
OK
Hello.sh や testHello.sh の内容は次の通り。ちなみに、shunit2-2.1.5/examples/mkdir_test.sh あたりをみると、テストスーツで複数のテストを実行する場合の方法もわかります。
$ cat src/Hello.sh
#!/bin/sh
echo "Hello"
#!/bin/sh
echo "Hello"
$ cat src/testHello.sh
#!/bin/sh
testHello() {
r=`./Hello.sh`
assertEquals "Hello" "${r}"
}
. ../shunit2-2.1.5/src/shell/shunit2
Hello.sh では、echoコマンドで「Hello」と標準出力へ文字列を出力。その値をtestHello.shでは変数r へ代入し、これをassertEqualsで比較しています。値が一致していればOKとなりますし、値が一致していなければFAILED となります。ためしに、Hello.shで表示する文字列を例えば「hello」とすると、次のような結果になります。
$ ./testHello.sh
testHello
ASSERT:expected:<Hello> but was:<hello>
testHello
ASSERT:expected:<Hello> but was:<hello>
Ran 1 test.
FAILED (failures=1)
関連書籍: