テスト駆動開発の開発サイクルについて

Ruby
スポンサーリンク

テスト駆動開発の典型的な開発サイクルについてのメモです。

  1. まずテストコードを書く
  2. テストが失敗することを確認する(実装が無いので必ず失敗)
  3. 1つのテストをパスするための仮実装を書く(固定値を返却するイメージ)
  4. テストがパスすることを確認する(=テストの疎通確認)
  5. 別のテストパターンを書く
  6. テストがきちんと失敗することを確認する(=仮実装では失敗することを確認)
  7. 仮実装を消して、ちゃんとしたロジックを実装する
  8. テストが全てパスすることを確認する
  9. ロジックをリファクタリングする
  10. テストが全てパスすることを確認する

RubyでFizzBuzzのコードとテストをまとめると↓みたいな感じ。

def fizz_buzz(n)
  if n % 15 == 0
    'Fizz Buzz'
  elsif n % 3 == 0
    'Fizz'
  elsif n % 5 == 0
    'Buzz'
  else
    n.to_s
  end
end

require 'minitest/autorun'

class FizzBuzzTest < Minitest::Test
  def test_fizz_buzz
    assert_equal '1', fizz_buzz(1)
    assert_equal '2', fizz_buzz(2)
    assert_equal 'Fizz', fizz_buzz(3)
    assert_equal '4', fizz_buzz(4)
    assert_equal 'Buzz', fizz_buzz(5)
    assert_equal 'Fizz', fizz_buzz(6)
    assert_equal 'Fizz Buzz', fizz_buzz(15)
    assert_equal 'Fizz Buzz', fizz_buzz(30)
  end
end

ようは「テスト大事(=当たり前)」ってことですね。

コメント