- require File.dirname(__FILE__) + '/../test_helper'
- class UserTest < Test::Unit::TestCase
- fixtures :users
- def test_full_name_without_middle_initial
- user = User.new(:first_name => 'John', :last_name => 'Doe')
- assert_equal 'John Doe', user.full_name
- end
- def test_full_name_with_middle_initial
- user = User.new(:first_name => 'John', :middle_initial => 'H', :last_name => 'Doe')
- assert_equal 'John H. Doe', user.full_name
- end
- def test_full_name_with_blank_middle_initial
- user = User.new(:first_name => 'John', :middle_initial => '', :last_name => 'Doe')
- assert_equal 'John Doe', user.full_name
- end
- end
看起來太複雜了是嗎?重構!
- require File.dirname(__FILE__) + '/../test_helper'
- class UserTest < Test::Unit::TestCase
- fixtures :users
- def test_full_name
- assert_equal 'John Doe', full_name('John', nil, 'Doe'), "nil middle initial"
- assert_equal 'John H. Doe', full_name('John', 'H', 'Doe'), "H middle initial"
- assert_equal 'John Doe', full_name('John', '', 'Doe'), "blank middle initial"
- end
- def full_name(first, middle, last)
- User.new(:first_name => first, :middile_initial => middle, :last_name => last).full_name
- end
- end
上面的代碼將3個測試方法重構爲一個,然後在assert語句末尾加上字符串來標識具體測試類型,full_name被提取出來,代碼清晰多了。
但有人投出了反對票,不贊成在一個測試方法裏有多個assertion,而應該per方法per assertion。