TestFirst性能监视器Ruby

时间:2013-02-11 21:02:16

标签: ruby

我是一个想要在本教程中解决一些问题的新手:http://testfirst.org/live/learn_ruby/performance_monitor

我目前的代码通过了7个中的5个,最后两个失败了。我认为问题是我真的没有得到它的要求:

it "returns the average time, not the total time, when running multiple times" do
  run_times = [8,6,5,7]
  fake_time = @eleven_am
  Time.stub(:now) { fake_time }
  average_time = measure(4) do
    fake_time += run_times.pop
  end
  average_time.should == 6.5
end

以下是我目前的情况:

def measure(x=0)

  if x>0
    x.times do yield end
  else
    y= Time.now
    yield 
    elapsed_time=Time.now-y
    elapsed_time
  end
end

我不是在寻找复制和粘贴答案。我希望清楚它的要求,以及我如何应对挑战。感谢。

1 个答案:

答案 0 :(得分:0)

规范期望性能监视器不返回总时间,而是平均值。您当前版本的代码既不返回总计,也不返回平均值,而是返回调用yield语句的计数

您当前的解决方案版本失败,并出现以下错误:

1) Performance Monitor returns the average time, not the total time, when running multiple times
   Failure/Error: average_time.should == 6.5
     expected: 6.5
          got: 4 (using ==)
   # ./06_performance_monitor/performance_monitor_spec.rb:64

所以你要返回计数而不是[8,6,5,7]平均值

如果规范失败并出现以下错误,则返回总和( 26.0 = 8 + 6+ 5 + 7 )

1) Performance Monitor returns the average time, not the total time, when running multiple times
   Failure/Error: average_time.should == 6.5
     expected: 6.5
          got: 26.0 (using ==)
   # ./06_performance_monitor/performance_monitor_spec.rb:64

一些指导可以帮助你前进:

  1. 看看你的假设,计数应该默认为0(由x=0 param定义传递给measure。如果程序调用{​​{1}}没有任何参数,那么说它被称为一次而不是零次是有道理的吗?

  2. 尝试通过在[8,6,5,7]的每个值上浏览measure的代码,并修改/添加新内容来了解​​您的程序返回4的原因measure文件中的测试用例。 提示:代码未在此路径中执行任何性能监控;-)