テスト駆動開発の典型的な開発サイクルについてのメモです。
- まずテストコードを書く
- テストが失敗することを確認する(実装が無いので必ず失敗)
- 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
ようは「テスト大事(=当たり前)」ってことですね。


コメント