2

このチュートリアルでいくつかの問題を解決しようとしている初心者です: http://testfirst.org/live/learn_ruby/performance_monitor

私の現在のコードは 7 つのうち 5 つに合格し、最後の 2 つには不合格です。問題は、私が本当に求めているものが得られないことだと思います:

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

コピーアンドペーストの答えを探しているわけではありません。私は、それが何を求めているのか、そしてどのようにその課題に取り組むことができるのかを明確にしたいと思っています. ありがとう。

4

1 に答える 1

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]

spec が次のエラーで失敗した場合、 sum が返されます( 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います。プログラムがmeasureパラメーターなしで呼び出される場合、0 回ではなく 1 回呼び出されたと言うのは理にかなっていますか?

  2. [8,6,5,7] の各値の4コードを確認し、ファイル内の新しいテスト ケースを変更/追加して、プログラムが返される理由を理解してください。ヒント:コードはこのパスでパフォーマンス監視を行っていません ;-)measureperformance_monitor_spec.rb

于 2013-02-12T00:09:49.197 に答える