2013-06-15 5 views
9

Test::Classについて読んだすべてのチュートリアルでは、すべてのクラスをロードするランナースクリプトが1つあるようです。そして、私はTest::Harnessの観点から、これはちょうど1つの巨大なテストだと思います。私はそれが走者の内部のテストを並列化できるとは思わない。Test :: Classテストを並行して実行できますか? (またはスーパークラスのテストをどのように除外するか)

私の問題は、サブクラスをテストするときにスーパークラスの振る舞いを除外しようとしていることです。各サブクラスは、(並列化可能な)独自のサブクラステストを持つ必要がありますが、スーパークラスから継承されたエクササイズビヘイビアも必要です。それはどうですか?

編集:2007年のこれら2つの投稿は、私が求めていることは互換性がない/不可能であることを暗示しているようです。それ以降の更新はありますか?

+0

あなたは 'forkprove'を見ることができますが、私はsurではありません'Test :: Class'で正しく動作する場合はe – Taras

+1

' Test :: Harness'は並列テストの実行を制御しているようです:http://stackoverflow.com/questions/11977015/how-to-run-some-but -not-all-per-perl-test-suite-in-parallel – fenway

+0

もちろんそうです。しかし、Test :: HarnessではなくTest :: Classを使用しています。 –

答えて

5

Test::Classが独自に並列化をサポートしていません。おそらく最も簡単な解決策は次のようになりテストクラス(またはテストクラスの論理グループ)ごとに別々の.tランナーを持ち、例えばprove -j9を使用して実行する。

すべてのテストを並行して実行したい場合は、各テストクラスに対して.tファイルを自動生成する簡単なスクリプトを書くことができます。 1つのperlインタプリタで複数のテストクラスを実行することによるパフォーマンス上の利点は失われますが、並列化は追加の起動時オーバーヘッドを補うかもしれません。そして、私は、Test::Classがどれくらいテスト分離を提供しようと試みても、それをPerlで保証することは不可能だと主張します。モックの目的などのためにシンボルテーブルを修正し始めると、いつもクリーンアップ権が得られない限り、テストはお互いに干渉し始めるでしょう。個別のperlインタープリタで各テストを実行することは、保証された分離を提供するより良い方法です。

3

Test :: Classを並列にするために、以下のメカニズムを使用しました。それがあなたを助けることができると願っています

私はParallel::ForkManagerモジュールを使ってテストを呼び出しました。必要なテストを並列各スレッドに

を実行されるように、しかし

これは、各テストを独立して起動され、ので、他のテストの間のアイソレーションを提供し、

TEST_METHOD環境変数をパラメータ化していました

スレッドプロセスはすべての子プロセスが完了するまで待機するように管理されます

関連する問題