先日衝動買いしたInstant RSpec Test-Driven Development How-to [Kindle版]の最初に出てくるサンプルコード
#location_spec.rb
describe Location do
describe "#initialize" do
it "sets the latitude and longitude" do
loc = Location.new(:latitude => 38.911268,
:longitude => -77.444243)
loc.latitude.should == 38.911268
loc.longitude.should == -77.444243
end
end
end
- 上記テストを通過させるために「自分が書いたコード」が以下のもの
rspec failed
#my_answer.rb
class Location
attr_accessor :latitude
attr_accessor :longitude
def initialize(lati=nil, long=nil)
@latitude = lati
@longitude = long
end
end
- 「リファクタリング前のコード」として本で紹介されているコード
rspec passed
#bad_answer.rb
class Location
def initialize(args = {});end
def latitude
38.911268
end
def longitude
-77.444243
end
end
- 「リファクタリング後のコード」として本で紹介されているコード
rspec passed
#model_answer.rb
class Location
attr_accessor :latitude, :longitude
def initialize(args = {})
self.latitude = args[:latitude]
self.longitude = args[:longitude]
end
end
テストを通過させるためだけに書かれたような「リファクタリング前のコード」がエラーにならないのに、上記「自分のコード」がエラーになるのは納得がいかない。
自分のコードに何かエラーにしなければならない理由があるのか?自分にはわからないので誰か教えてください。