我是一个新手,想在本教程中解决一些问题:http://testfirst.org/live/learn_ruby/performance_monitor
我现在的代码通过了5/7,最后两个都不及格我想问题是我真的不明白它的要求:

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

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

最佳答案

规范期望性能监视器不会返回总次数,而是返回平均值当前版本的代码既不返回总数,也不返回平均值,而是返回调用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]的平均值。
如果规范因以下错误而失败,则返回总和:
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

有两个指针可以帮助您前进:
看看您的假设,计数应该默认为0(由传递给( 26.0 = 8 + 6+ 5 + 7 )x=0参数定义)如果程序在没有任何参数的情况下调用measure,那么说它已经被调用过一次而不是零次难道不合理吗?
通过遍历[8,6,5,7]的每个值上的measure代码,并修改/添加4文件中的新测试用例,尝试理解程序返回measure的原因提示:代码没有在此路径中执行任何性能监视;-)

10-06 12:47