1

既存のコード ベースの単体テスト ケースを作成していますが、テスト ケースの作成を進めていると、テスト ファイルのサイズが大きくなり、実行に非常に時間がかかっています。

私は単体テストの限界を知っており、効率を高めるためにいくつかの調査も行いました。調査中に、提供されたデータ セットを強化するための 1 つの有用なアイデアを見つけました。

それでも、ユニットテストケースの実行/作成の効率を高める方法について、さらにアイデアを探していますか? この範囲外でサーバー リソースを増やすオプションを保持できます。

4

1 に答える 1

0

あなたの質問は一般的なものだったので、いくつかの一般的な選択肢について説明します。しかし、ほとんどの高速化手法には欠点があります。

外部コンポーネント (Web サービス、ファイル システムなど) に依存している場合は、それらをモックすることで高速化できます。とにかく、これは通常、単体テストには望ましいものです。実際のコンポーネントでテストする統合/機能テストが必要です。

データベースをテストする場合、メモリ内データベースを使用することでかなりのスピードアップを得ることができます (sqlite は PHP の PDO でうまく動作します; Java ではおそらく H2?)。データベースの移植性がすでに設計目標になっていない限り、これには欠点があります。(MySQL と sqlite の両方に対して 1 セットの単体テストを実行しようとしています。) データベースを完全にモックする (上記を参照) 方が良いかもしれません。

PHPUnit では、各テストで@groupを指定できます。遅いテストを でマークしてから@group slow、コマンドライン フラグを使用し--exclude-groupて、ほとんどのテスト実行でそれらを除外し、オーバーナイト ビルドに含めることができます。(phpunit.xml.dist ファイルに含める/除外するグループを指定することもできます。(jUnit にはこのオプションがないと思いますが、TestNG にはあります。C# の場合、NUnit はこのためのカテゴリを提供します。)

フィクスチャを一度作成してからテスト間で共有すると、各テストの前にフィクスチャを作成するよりも速くなります。XUnit テスト パターンでは、このアプローチの長所と短所 (主に短所) について章全体を説明しています。

あなたの質問ではハードウェアを投げることが明示的に禁止されていることは知っていますが、@group をもう一度見て、テストを複数のマシンに分割する方法を検討してください。または、ディレクトリごとにテストを分割し、LAN 上の複数のマシンのそれぞれで 1 つのディレクトリを処理します。(PHPUnit はシングルスレッドなので、同じマシン上で複数のインスタンスを実行し、それぞれが独自のディレクトリを実行できます。フィクスチャが独立している必要があることに注意してください (作成するデータベースの一意の名前、ファイルシステムのモックなどを含む)。このルートを下ります。)

于 2013-01-31T10:05:08.763 に答える