2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bash も TDD が簡単に出来る

Posted at

TDD

テスト駆動飲み会で bash による テスト駆動 を体験して感動した

飲み会が始まって

cyber-dojo を見て bash, bats の選択肢にわくわく!

image.png

Fizz Buzz やってみた

ここからは 記憶を頼りにした再現してみる 感動を追体験できるかな

1 のとき 1

test
@test "1 is 1" {
  local actual=$(answer 1)
  [ "$actual" == "1" ]
}
product
answer()
{
  echo 1
}

3 のとき Fizz

test
@test "3 is Fizz" {
  local actual=$(answer 3)
  [ "$actual" == "Fizz" ]
}
product
answer()
{
  if [ $1 == 3 ]
  then
    echo Fizz
  else
    echo 1
  fi
}

3 の倍数のとき Fizz

test
@test "6 is Fizz" {
  local actual=$(answer 6)
  [ "$actual" == "Fizz" ]
}
product
answer()
{
  if [ $(($1 % 3)) == 0 ]
  then
    echo Fizz
  else
    echo 1
  fi
}

5 の倍数のとき Buzz

test
@test "5 is Buzz" {
  local actual=$(answer 5)
  [ "$actual" == "Buzz" ]
}
product
answer()
{
  if [ $(($1 % 3)) == 0 ]
  then
    echo Fizz
  elif [ $(($1 % 5)) == 0 ]
  then
    echo Buzz
  else
    echo 1
  fi
}

15 の倍数のとき FizzBuzz

test
@test "15 is FizzBuzz" {
  local actual=$(answer 15)
  [ "$actual" == "FizzBuzz" ]
}
product
answer()
{
  if [ $(($1 % 3 + $1 % 5)) == 0 ]
  then
    echo FizzBuzz
  elif [ $(($1 % 3)) == 0 ]
  then
    echo Fizz
  elif [ $(($1 % 5)) == 0 ]
  then
    echo Buzz
  else
    echo 1
  fi
}

後略

  • このままだと 2 のとき 1 が返ってくるとか
  • 1 から 100 までのループとか
  • 0 や 101 の考慮とか

飲み会が終わって

  • 沢山飲んだ、コーラをコップで10杯くらい貰いました
    • 飲めない人に強要する人もいないし良い飲み会ですよー
  • 今回使ったテストフレームワーク
    Bats: Bash Automated Testing System
    • 結構直感でテストの書き方が想像ついた
    • 皆が知ってる言語なのにテストを書いた経験者ゼロだった
    • 今後は bash も安心してリファクタリングできる
  • たのしい

おしまい

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?