Rails寶典之第十一式: 重構用戶名-p2

繼續重構。 

我們先來寫User類的單元測試,定義3個測試方法: 
Java代碼  收藏代碼
  1. require File.dirname(__FILE__) + '/../test_helper'  
  2.   
  3. class UserTest < Test::Unit::TestCase  
  4.   fixtures :users  
  5.   
  6.   def test_full_name_without_middle_initial  
  7.     user = User.new(:first_name => 'John', :last_name => 'Doe')  
  8.     assert_equal 'John Doe', user.full_name  
  9.   end  
  10.   
  11.   def test_full_name_with_middle_initial  
  12.     user = User.new(:first_name => 'John', :middle_initial => 'H', :last_name => 'Doe')  
  13.     assert_equal 'John H. Doe', user.full_name  
  14.   end  
  15.   
  16.   def test_full_name_with_blank_middle_initial  
  17.     user = User.new(:first_name => 'John', :middle_initial => '', :last_name => 'Doe')  
  18.     assert_equal 'John Doe', user.full_name  
  19.   end  
  20. end  

我們再看看我們的full_name方法,顯然是無法滿足所有的測試的: 
Java代碼  收藏代碼
  1. class User < ActiveRecord::Base  
  2.   def full_name  
  3.     name = first_name  
  4.     name += "#{middle_initial}." unless middle_initial.nil?  
  5.     name += last_name  
  6.     name  
  7.   end  
  8. end  

而且middle_initial後面跟一個"."也讓我們的代碼"風水"不好,比如我們突然有一天把"."改成"-"呢?好,我們繼續重構吧: 
Java代碼  收藏代碼
  1. class User < ActiveRecord::Base  
  2.   def full_name  
  3.     [first_name, middle_initial_with_period, last_name].compact.join(' ')  
  4.   end  
  5.   
  6.   def middle_initial_with_period  
  7.     "#{middle_initial}." unless middle_initial.blank?  
  8.   end  
  9. end  

運行測試,ok,通過了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章