5

最近、数千の phpunit テストを実行しています。オプションを使用--process-isolationしているため、テストが完了するまでに約 40 分かかります。

積極的なリファクタリングの後で、多くのテストが失敗し始めることがあります (テストがあることに感謝します!)。また、テスト スイートの途中でテストが失敗した場合は、それがどのようなテストで、どのようなメッセージが表示されるかを確認するために、さらに 20 分待たなければなりません。

--stop-on-failureプロセス全体を中断しなかった場合に使用します。基本的に私はオプションを探してい--log-on-failureます。

私が正確に探しているのは、他のすべてのテストが終了した後ではなく、失敗した直後にテストの失敗/エラーメッセージを表示する方法です。ただし、他のテスト実行のプロセス全体が中断されるべきではありません。ファイルへのログ記録でも十分です。

あなたの提案に感謝します。

編集:一般的にテストを改善する方法についての提案を見てうれしいです。それらに従うようにしますが、正確な問題の解決策を見つけたいと思います。

4

2 に答える 2

2

ほったらかしでも探している--stop-on-failure

エラーがどこにあるかがわかれば、修正を書くことができるからです。次に、テストを再度実行する必要があります。

10 秒後に最初の失敗が表示され、さらに 1 分以内に修正されるとしましょう。ただし、まだ待つ必要があります。テストを実行できるようになるまで 38 分。

また、テストに時間がかかりすぎるという問題もあります。それらをより速く取得する必要があります。使用していること--process-isolationは、最終的には統合テストがあることを示しています。それらを単体テストから分離すると、多くの場合、時間がかかります。

次に、統合テストを分離して継続的に (常にループで) 実行し、ファイルを保存するときに単体テストを実行します。

于 2013-01-29T15:13:19.057 に答える
1

これらすべてのテストを書いてくれてありがとう。あなたが言うように、大きなリファクタリング タスクを開始すると、すぐにその価値を証明できます。しかし、40 分というのは非常に遅い一連のテストのように思えます。数千のテストであっても、約 10 秒で数百のテストを実行できます。おそらく、特に遅いいくつかのテストがありますか?

システムがそうするのに適している場合は、変更されているコードに関連するテストのみを実行するように設定できるように、それらをグループに分割する価値があるかもしれません。PHPUnit は、テストのグループ化と、実行するグ​​ループをコマンドラインで指定することをサポートしています。

これは、ほとんどのテストが非常に高速であるが、ほとんどの時間を占める非常に遅いテストがいくつかある場合に特に効果的な戦略になる可能性があります。関連性のない非常に遅いテストのいくつかをスキップできるようになれば、大きな違いが生まれます。

さらに、テストをグループ化するこの戦略により--stop-on-failure、他のグループのすべてのテストを実行しながら、各グループに使用することもできます。

テストのグループ化の詳細については、PHPUnit のマニュアルを参照してください。

それが役立つことを願っています。

于 2013-01-29T10:12:39.180 に答える