自動機能テストを実行したいサーバーがあります。構成ファイルからデータを取得してメモリ内モデルを構築するには、合計数千のオブジェクトを初期化する必要がありますが、これはコンピューターにとっては簡単なことであり、Eclipse から実行するとほぼ瞬時に起動します。
junit テストの一部として同じプログラムを実行すると、スタンドアロン アプリの瞬間的な速度ではなく、初期化フェーズに 15 秒ほどかかります。それほど長くはありませんが、何十ものテストを実行する予定がある場合は、合計されます。
JVisualVM によると、この時間は 6 つのメソッドに分散しており、CPU 時間の 14% を超えるメソッドはありません (これは、CPU の 50% を使用していたメソッドを最適化した後でした)。実行中のすべてのメソッドは、実行されると予想されるメソッドであり、合計 CPU 時間の妥当な割合を占めているようです。ライブ サーバーは初期化が非常に速く、プロファイリングするのに十分な速さで JVisualVM を起動および停止できないため、ライブ サーバーと比較することはできません。すべてのオブジェクトの init メソッドに時間がかかるように見えます。たとえば、あるオブジェクトは init に 3% の CPU を使用しますが、セルフ タイムは 000 ミリ秒で、他の呼び出しは行いません。しかし、それがJVisualVMを使用した一般的な結果かどうかはわかりませんか?
スタンドアロン アプリとして実行している場合と比べて、Junit で 1 つのことを別の方法で行っていることは問題ではありません。私は serverMock オブジェクトを使用しています (ただし、ほとんどモック ATM ではありません)。サーバーオブジェクトを拡張します。現時点でこれを拡張する唯一の理由は、サーバーの run メソッド (着信メッセージを無期限に待機して実行される) が、サーバーが jar として実行されるときに main() メソッドによって呼び出される保護されたメソッドであるためです。私のモックは、単体テストでメソッドを開始する他の方法がないため、サーバーの run メソッドを実行するスレッドを生成するメソッドを追加します。ただし、速度が低下するのは、サーバーが run メソッドに到達する前のサーバーの初期化です。だから私はこれが減速の原因だとは思わないのですか?