Bats でシェルスクリプトをテストする
Install
ubuntu
sudo apt-get install batsMac
brew install batsexec bats
source test.bats
Good pattern
@test 'add test' {
var_01=5
var_02=15
[[ var_01+var_02 -eq 20 ]]
}
@test 'div test' {
var_01=5
var_02=15
[[ var_02/var_01 -eq 3 ]]
}bats test.bats結果
✓ add test
✓ div test
2 tests, 0 failuresBad pattern
@test 'add test' {
var_01=5
var_02=15
[[ var_01+var_02 -eq 20 ]]
}
@test 'div test' {
var_01=5
var_02=15
[[ var_02/var_01 -eq 2 ]] # Here
}bats test.bats結果
✓ add test
✗ div test
(in test file test.bats, line 9)
`[[ var_02/var_01 -eq 2 ]]' failed
2 tests, 1 failure複数ファイルの実行
├── tests
│ ├── test.bats
│ └── test2.bats
bats tests本来の シェルスクリプトを読み込んでテスト
構成
├── test.sh
└── test.batstest.sh
#!/usr/bin/env bash
if [[ $1 == test ]]; then
param='test'
else
param='not test'
fi
echo "$param"
test.bats
@test 'param test ok' {
run ./test.sh test
[[ $status -eq 0 ]]
[[ $output == 'test' ]]
}
@test 'param test ng' {
run ./test.sh tst
[[ $status -eq 0 ]]
[[ $output == 'not test' ]]
}テストスクリプトを別ディレクトリで管理したい
構成
├── test.sh
└── tests
├── test.batsbats には bats を実行している絶対パスを BATS_TEST_DIRNAME という環境変数もっている。 でもこの場合は一つ上のディレクトリを指定したい
PATH="${BATS_TEST_DIRNAME%/*}:$PATH"%/*で一つ上のディレクトリを Path に追加
test.sh
#!/usr/bin/env bash
if [[ $1 == test ]]; then
param='test'
else
param='not test'
fi
echo "$param"
tests/test.bats
PATH="${BATS_TEST_DIRNAME%/*}:$PATH"
@test 'param test ok' {
run test.sh test
[[ $status -eq 0 ]]
[[ $output == 'test' ]]
}
@test 'param test ng' {
run test.sh tst
[[ $status -eq 0 ]]
[[ $output == 'not test' ]]
}run 後の変数
| 変数 | 内容 |
|---|---|
| status | 終了ステータス |
| output | スクリプトの出力 |
| lines | outputを分割した配列 |
通常は status と output で判定
c
