あなたの質問は一般的なものだったので、いくつかの一般的な選択肢について説明します。しかし、ほとんどの高速化手法には欠点があります。
外部コンポーネント (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 はシングルスレッドなので、同じマシン上で複数のインスタンスを実行し、それぞれが独自のディレクトリを実行できます。フィクスチャが独立している必要があることに注意してください (作成するデータベースの一意の名前、ファイルシステムのモックなどを含む)。このルートを下ります。)