Rspec定时器测试问题

时间:2013-07-07 05:38:43

标签: ruby class time rspec numbers

我被困在二档,请查看我的代码并给我一些意见。谢谢。

class Timer
    def initialize(seconds = 0,time_string = "00:00:00")
        @seconds = seconds
        @time_string = time_string

    end

    def seconds=(new_sec)
        @seconds = new_sec
    end

    def seconds
        @seconds
    end

    def time_string=(new_time)

        hh = seconds/3600
        mm = seconds%3600/60
        ss = seconds%60
        new_time = "#{hh}:#{mm}:#{ss}" 
        @time_string = new_time 
    end

    def time_string
        @time_string
    end
end

Rspec的:

require 'timer'

describe "Timer" do
  before(:each) do
    @timer = Timer.new
  end

  it "should initialize to 0 seconds" do
    @timer.seconds.should == 0
  end

  describe 'time_string' do
    it "should display 0 seconds as 00:00:00" do
    @timer.seconds = 0
    @timer.time_string.should == "00:00:00"
  end

  it "should display 12 seconds as 00:00:12" do

    @timer.seconds = 12
    @timer.time_string.should == "00:00:12"
  end

  it "should display 66 seconds as 00:01:06" do
    @timer.seconds = 66
    @timer.time_string.should == "00:01:06"
  end

  it "should display 4000 seconds as 01:06:40" do
    @timer.seconds = 4000
    @timer.time_string.should == "01:06:40"
  end
end

1 个答案:

答案 0 :(得分:0)

以下是作业def time_string=(new_time),但您实际上并没有使用new_time来更改任何内容的值,因此最好只说def time_string来定义一个getter。 (您的测试并不表示您希望能够通过提供的time_string设置时间。)

正如Neil Slater指出你不需要有一个实例变量@time_string,只需从time_string方法返回new_time,你就拥有了你想要的东西。所以你的代码......

def time_string=(new_time)

        hh = seconds/3600
        mm = seconds%3600/60
        ss = seconds%60
        new_time = "#{hh}:#{mm}:#{ss}" 
        @time_string = new_time 
    end

替换为

def time_string
  hh = @seconds/3600
  mm = @seconds%3600/60
  ss = @seconds%60
  new_time = "#{hh}:#{mm}:#{ss}" 
end