私のアプリケーションにクライアントスレッドとサーバースレッドがあります。これらのアプリをスタンドアロンアプリとして実行すると、これらのスレッドは適切に通信します。JUnitスレッドテスト
しかし、クライアントをJUnitとサーバーとしてスタンドアロンで実行すると、クライアントスレッドは数秒で終了します。
私は、なぜそのような異なる動作を得ることができませんでした。
私のアプリケーションにクライアントスレッドとサーバースレッドがあります。これらのアプリをスタンドアロンアプリとして実行すると、これらのスレッドは適切に通信します。JUnitスレッドテスト
しかし、クライアントをJUnitとサーバーとしてスタンドアロンで実行すると、クライアントスレッドは数秒で終了します。
私は、なぜそのような異なる動作を得ることができませんでした。
JUnitランナーが終了すると、生成されたすべてのスレッドなども(別のJVMインスタンスで実行される可能性が高いので)強制終了されます。
ここには(かなり古い)article describing the problem you experiencedがあります(GroboUtilsライブラリは長い時間前に放棄されているようです)。そしてanother, recent oneは、新しいJava並行性フレームワークを使用したより現代的なソリューションです。
後者の解決策の要点は、executorを介してスレッドを実行し、実行の結果をFuture
でパブリッシュすることです。スレッドがタスクを終了するまでFuture.get
がブロックされ、自動的にJUnitテストが実行されます。このトリックをあなたのケースに適応させることができるかもしれません。
スレッドが死んでも例外はありますか? – Thilo
例外はありません... :( スタンドアロンのアプリケーションと同じことは奇妙なことです – Aryan
スレッドはどのくらい正確に「死んでいますか」とはどういうことですか? – ShiDoiSi