この記事の目的
この記事では、
Bashの自動テストツール(bats)環境の構築
を目的としています。
本題
★batsとは
Bash Automated Testing Systemです。
GitHubのURL↓
github.com
batsは、TAP(後述します)に準拠したbash用のテストフレームワークです。
batsによって、実装したbashが期待通りに動作することを簡単に検証することができます。
batsのテストケースは、bashスクリプトと、batsによって提供される構文で実装します。
こんな感じです(GitHubから拝借しています)。
#!/usr/bin/env bats @test "addition using bc" { result="$(echo 2+2 | bc)" [ "$result" -eq 4 ] } @test "addition using dc" { result="$(echo 2 2+p | dc)" [ "$result" -eq 4 ] }
上記の例だと、2件のテストケースが定義されています。
resultに格納された値が4になることの検証を行っています。
★環境
以下の環境で作業を行いました。
Virtual Boxで用意したUbuntu(18.04)
Visual Studio Code(1.24.1)
bats(VS Codeの拡張機能 v.0.1.2)
bats(batsコマンドv.0.4.0)
GNU Bash(4.4.19)
★batsのVSCode拡張機能のインストール
Visual Studio Codeの拡張機能でbatsを検索し、インストールします。
★batsコマンドのインストール
batsを実行するためのコマンドをインストールします。
ubuntuのターミナルで以下のコマンドを実行します。
※管理者パスワードが要求されます。
sudo apt install bats
★動作確認用のbatsファイルとプログラムの用意
batsのコードを実装する環境と、実行する環境が整いました。
引き続き、batsのテストコードと、テスト対象のコードを実装していきます。
テスト対象のコードは以下の通りです。
ファイル名は、Program001.shとします。
#!/bin/bash echo "hello" exit 0
単純明快w
続いて、テストコードを実装します。
ファイル名は、Program001.batsとします。
#!/usr/bin/env bats @test "test name"{ Run ./Program001.sh #<-テスト対象のスクリプトを実行します。 echo {$lines[0]} #<- 失敗時の確認用に標準出力の1行目の文字を出力します。 [ "${lines[0]}"="hello" ] #<- 標準出力の1行目の文字の検証を行います。 [ "$status" -eq 0 ] #<- 終了コードが0であることの検証を行います。 }
各ファイルは以下のように配置しました。
これで、準備が完了しました。
★テスト実行
早速テストを実行します。
VSCodeのエクスプローラで、対象のファイルが格納されたパスでターミナルを開きます。
batsコマンドに、対象のテストファイルを渡して実行します。
実行結果↓
なお、$statsuの期待値を9にして、わざと失敗させた場合は以下の通りの出力となります。
わかりやすい!
★実行がうまくいかないとき
自分がbats環境を構築していてはまった点を忘備録として残しておきます。
上記の通りにスクリプトを準備しても、テストが成功しないことがありました。
何が悪いのかわからないので、テストコードを変更し、
検証に失敗しているlines変数に何が入っているか確認してみました。
実行してみます。
許可がない・・・だと・・・
いろいろ調べてみると、ファイルの実行権限が内容だということがわかりました。
参考)http://nasunu-i.b.la9.jp/LinuxBeginner/ExecPermission.htm
おもむろにllコマンドでファイルの権限を調べてみると
権限設定は以下のようになっていました。
rwだけ・・・
ファイルのプロパティで見ても、読み書きだけ権限になっています。
確かに権限がなかったです。
結局この問題は、上記画像の「プログラムとして実行可能」チェックをつけるか、
「chmod u+x Program001.shコマンドを実行することで解決します。
↓コマンドを実行し、実行可能権限を付与したところ。
無事権限が付与され、実行可能を意味する「x」が付きました。
ファイル名の色も変わっています(´▽`)
再度テストを実行すると・・・
無事成功させることができた!(∩´∀`)∩ワーイ