8

私が読んだすべてのチュートリアルではTest::Class、すべてのクラスをロードする 1 つのランナー スクリプトがあるようです。Test::Harnessこの観点からすると、これは 1 つの巨大なテストにすぎないと思います。ランナー内のテストを並列化できるとは思いません。

私の X の問題は、サブクラスをテストするときにスーパークラスの動作を除外しようとしているということです。各サブクラスには独自のサブクラス テスト (並列化可能) が必要ですが、スーパークラスから継承された動作も実行します。どうやってそれをしますか?

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

4

2 に答える 2

5

Test::Class単独では並列化をサポートしていません。おそらく最も簡単な解決策は.t、テスト クラス (またはテスト クラスの論理グループ) ごとに個別のランナーを用意し、たとえばprove -j9.

すべてのテストを並行して実行したい場合は、.tテスト クラスごとにファイルを自動生成する簡単なスクリプトを作成できます。単一の perl インタープリター内で複数のテスト クラスを実行することによるパフォーマンス上の利点は失われますが、並列化によって追加の起動オーバーヘッドが補われる可能性があります。Test::Classテスト分離を提供しようとしても、Perl でそれを保証することは不可能だと私は主張します。モックの目的などでシンボル テーブルの変更を利用し始めると、常にクリーンアップを適切に行わないと、テストが互いに干渉し始めます。各テストを個別の perl インタープリターで実行することは、分離を保証するためのより良い方法です。

于 2013-06-25T21:06:35.403 に答える
3

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

Parallel::ForkManagerモジュールを使用してテストを呼び出しました。しかし、持っていた

TEST_METHOD必要なテストが実行されるように、環境変数をパラメーター化しました

各スレッドで並列

これにより、各テストが個別に呼び出されるため、他のテスト間の分離が提供されます。

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

于 2013-06-27T05:26:00.323 に答える