テスト駆動開発を教える際に、テストケースだけ渡すという方法をやってみた

本日会社のruby研修がありました。テーマは「テスト駆動開発」。その際に、id:yuum3がRubyKaigiで発表していた方法をやってみました。資料は以下のエントリーからDLできます。


yuum3の発表では、テスト駆動開発を教える際に、こちらが用意したテストケースを渡し、そのテストを通過するようなコードを書いてもらうという方法はどうだろう。という話でした。で、早速やってみました。テストケースは以下のような感じです。

  • user_test.rb
class User
end

if __FILE__ == $0
require 'test/unit'

class UserTest < Test::Unit::TestCase
  def test_initialize
    user = User.new(:name => 'bob',
                    :age  => 21
                    :sex  => 0)
  
    assert_equal 'bob', user.name
    assert_equal 21,    uesr.age
    assert_equal 'man', user.sex
  end
end
end 


これをパスすればクリア。単純。上のテストをパスするだけでいいなら、こんな感じでパスできる。

  • user_test.rb
class User
  attr_accessor :name, :age, :sex
 
  def initialize(attributes = {})
    attrs = [:name, :age, :sex]
    
    attrs.each do |attr|
      instance_eval <<-EVAL
        @#{attr} = attributes[attr]
      EVAL
    end
  end
 
  def sex
    case @sex
    when 0
      'man'
    else
      'woman' 
    end
  end
end


楽しそうだった。いい方法でした^^