テスト駆動開発の典型的な開発サイクルについてのメモです。
- まずテストコードを書く
- テストが失敗することを確認する(実装が無いので必ず失敗)
- 1つのテストをパスするための仮実装を書く(固定値を返却するイメージ)
- テストがパスすることを確認する(=テストの疎通確認)
- 別のテストパターンを書く
- テストがきちんと失敗することを確認する(=仮実装では失敗することを確認)
- 仮実装を消して、ちゃんとしたロジックを実装する
- テストが全てパスすることを確認する
- ロジックをリファクタリングする
- テストが全てパスすることを確認する
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
ようは「テスト大事(=当たり前)」ってことですね。
コメント