🖥

Shellのテストフレームワーク bats を使ってみる

2023/08/26に公開

Github

sstephenson/bats: Bash Automated Testing System

ポイント

  • 他言語のユニットテスト同じようなフォーマットでテストが書ける
    • setup teardown skip や helper の仕組みがある
    • アウトプットもフォーマルな形式 ( e.g 5 tests, 2 failures, 1 skipped )
  • インストールが簡単、インストール用のシェルスクリプトを叩くだけ
  • Star数はかなりのもの、5000近い
  • 2018年8月現在でもメインバージョンがゼロ.
  • テストの結果表示で変数展開をしてくれない ( e.g [ "$one" -eq "$two" ] )
    • テストが何故成功したか、失敗したかの詳細が分かりづらい
  • シェルスクリプトのように -eu オプションが使えないので、変数未定義に注意する必要がある
  • 確かに完璧ではないけれどオレオレテストを書くよりは良いかもしれない
    • 探したら他にも色々フレームワークがありそう (試したい)

簡単なスクリプトの例

./example-test

#!/usr/bin/env bats

function setup() {
  one=1
  two=2
}

@test "succeed case" {
  [ 1 -eq 1 ] 
}

@test "succeed case ( use variable )" {
  [ "$one" -eq "$one" ]
}

@test "failure case" {
  [ 1 -eq 2 ] 
}

@test "failure case ( use variable ) " {
  [ "$one" -eq "$two" ]
}

@test "undefined variables but succeeded case" {
  [ "$none" = "$none" ] # Ooops this case succeed
}

@test "skip case" {
  skip
  [ 1 -eq 2 ]
}

結果の例

 ✓ succeed case
 ✓ succeed case ( use variable )
 ✗ failure case
   (in test file tmp/bats, line 17)
     `[ 1 -eq 2 ]' failed
 ✗ failure case ( use variable )
   (in test file tmp/bats, line 21)
     `[ "$one" -eq "$two" ]' failed
 ✓ undefined variables but succeeded case
 - skip case (skipped)

6 tests, 2 failures, 1 skipped

image

Versions

  • Bats 0.4.0

Lins

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2018-08-28

Discussion