我是一个想要在本教程中解决一些问题的新手: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
我不是在寻找复制和粘贴答案。我希望清楚它的要求,以及我如何应对挑战。感谢。
答案 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
一些指导可以帮助你前进:
看看你的假设,计数应该默认为0(由x=0
param定义传递给measure
。如果程序调用{{1}}没有任何参数,那么说它被称为一次而不是零次是有道理的吗?
尝试通过在[8,6,5,7]的每个值上浏览measure
的代码,并修改/添加新内容来了解您的程序返回4
的原因measure
文件中的测试用例。 提示:代码未在此路径中执行任何性能监控;-)