所以我正在尝试编写一些代码来为Ruby进行RSPEC测试。但即使让第一个测试通过,我也遇到了一些麻烦。我想如果我能对此有所帮助,我将能够得到余下的。但我可以发布其余的测试,如果这样可以更容易提供建议。
所以它正在构建一个华氏度/摄氏度转换器,但使用对象和类而不是仅定义几个方法来进行转换。
第一部分看起来像这样
require "temperature"
describe Temperature do
describe "can be constructed with an options hash" do
describe "in degrees fahrenheit" do
it "at 50 degrees" do
Temperature.new(:f => 50).in_fahrenheit.should == 50
end
说明中的一个提示是,Temperature对象构造函数应该接受带有:celsius或:fahrenheit条目的选项哈希。
任何帮助或提示将不胜感激。过去几周我一直坚持这个测试。提前致谢。
答案 0 :(得分:1)
我认为你的温度等级需要一些工作。为什么没有可以设置Temperature对象基值的'scale'属性?
以下是您发布内容的修改版本:
class Temperature
attr_accessor :value, :scale
def initialize(value, options={})
@value = value
if options.has_key?(:scale)
@scale = options[:scale]
else
@scale = :c
end
end
def in_fahrenheit()
if @scale == :c
( @value * 9.0/5.0 ) + 32.0
else
@value
end
end
end
调用#in_fahrenheit时无需创建新的Temperature对象。您可以使当前对象将数字(存储在属性中)转换为华氏度。您可以在创建对象时添加温度信息:
t1=Temperature.new(68, :scale =>:f)
t2=Temperature.new(0)
2.0.0dev :199 > t1.in_fahrenheit => 68
2.0.0dev :200 > t2.in_fahrenheit => 32.0