我是一个新手,想在本教程中解决一些问题: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
的原因提示:代码没有在此路径中执行任何性能监视;-)