2009-03-07 13 views
1

ルビのテスト/ユニットでは、テスト実行にかかる時間がソフトウェアによって示され、一連のパス、エラー、および失敗は擬似進行バーのように動作します。低速実行テストの識別

コードプロファイリングツールを使用したりテストを個別に実行したりすることは別として、どのテスト方法が高速で、どのテスト方法が遅いかを簡単に示す方法はありますか?

答えて

2

大規模なテストスイートでこれを行う必要があるときは、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 
1

はサラの回答によると、私は別のソリューションを好むだろう。
ソートなどのために、このリストを評価することができます。私は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); 
    } 
} 
+0

興味深い。 Rubyでは、おそらくTestSuiteクラスでそれをしたいと思うでしょう。 TestCaseに追加した場合は、スイート用ではなく、各テストクラスごとに1つのexecution_times配列があります。 –

+0

これはBeforeClassとBeforeの違いです。 BeforeClassは1回実行され、Beforeはすべてのテストケースに対して実行されます。 – guerda

1

...私の考えを説明するための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がベンチマークを持っています。

関連する問題