ルビのテスト/ユニットでは、テスト実行にかかる時間がソフトウェアによって示され、一連のパス、エラー、および失敗は擬似進行バーのように動作します。低速実行テストの識別
コードプロファイリングツールを使用したりテストを個別に実行したりすることは別として、どのテスト方法が高速で、どのテスト方法が遅いかを簡単に示す方法はありますか?
ルビのテスト/ユニットでは、テスト実行にかかる時間がソフトウェアによって示され、一連のパス、エラー、および失敗は擬似進行バーのように動作します。低速実行テストの識別
コードプロファイリングツールを使用したりテストを個別に実行したりすることは別として、どのテスト方法が高速で、どのテスト方法が遅いかを簡単に示す方法はありますか?
大規模なテストスイートでこれを行う必要があるときは、Test :: Unit :: TestCaseの設定とティアダウンを上書きします。これは正確な測定値を与えるものではありませんが、相対速度の評価に役立ちます。サラのような
セットアップが書いたが、ティアダウンは、テスト名、リスト内の実行時間を追加する必要があります
module Test
module Unit
def setup
@start_time = Time.now
end
def teardown
puts "#{@method_name}: #{Time.now - @start_time}s"
end
end
end
はサラの回答によると、私は別のソリューションを好むだろう。
ソートなどのために、このリストを評価することができます。私はRubyを知らないので、うまくいくかどうかわかりません。ここで
は、テスト・ユニットの宝石を使用している場合は、冗長モードでテストを実行しても、あなたにそれぞれどのくらいの情報を提供します
public class ExecutionTimeTest {
public static ArrayList<Double> executionTimes;
public double start;
@BeforeClass
public static void initializeList() {
executionTimes = new ArrayList<Double>();
}
@AfterClass
public static void printExecutionTimes() {
int i = 1;
for (Double time : executionTimes) {
System.out.println("Test " + (i++) + ": " + time);
}
}
@Before
public void startExecutionTime() {
start = System.currentTimeMillis();
}
@After
public void calculateExecutionTime() {
executionTimes.add(System.currentTimeMillis() - start);
}
}
...私の考えを説明するためのJUnitのためのいくつかのJavaコードでありますテストは取った:
ruby test/test_unit.rb --verbose
Loaded suite test/test_unit
Started
ChaserTestCase:
test_handle_funny_characters_in_class_method_names: .: (0.000645)
test_handle_funny_characters_in_instance_method_names:.: (0.000523)
test_modify_and_unmodify_class_method: .: (0.000534)
...
Finished in 0.019894 seconds.
MiniTestはalsoがベンチマークを持っています。
興味深い。 Rubyでは、おそらくTestSuiteクラスでそれをしたいと思うでしょう。 TestCaseに追加した場合は、スイート用ではなく、各テストクラスごとに1つのexecution_times配列があります。 –
これはBeforeClassとBeforeの違いです。 BeforeClassは1回実行され、Beforeはすべてのテストケースに対して実行されます。 – guerda