2012-04-23 5 views
3

私のアプリケーションにクライアントスレッドとサーバースレッドがあります。これらのアプリをスタンドアロンアプリとして実行すると、これらのスレッドは適切に通信します。JUnitスレッドテスト

しかし、クライアントをJUnitとサーバーとしてスタンドアロンで実行すると、クライアントスレッドは数秒で終了します。

私は、なぜそのような異なる動作を得ることができませんでした。

+0

スレッドが死んでも例外はありますか? – Thilo

+0

例外はありません... :( スタンドアロンのアプリケーションと同じことは奇妙なことです – Aryan

+0

スレッドはどのくらい正確に「死んでいますか」とはどういうことですか? – ShiDoiSi

答えて

8

JUnitランナーが終了すると、生成されたすべてのスレッドなども(別のJVMインスタンスで実行される可能性が高いので)強制終了されます。

ここには(かなり古い)article describing the problem you experiencedがあります(GroboUtilsライブラリは長い時間前に放棄されているようです)。そしてanother, recent oneは、新しいJava並行性フレームワークを使用したより現代的なソリューションです。

後者の解決策の要点は、executorを介してスレッドを実行し、実行の結果をFutureでパブリッシュすることです。スレッドがタスクを終了するまでFuture.getがブロックされ、自動的にJUnitテストが実行されます。このトリックをあなたのケースに適応させることができるかもしれません。

+0

ええと私は同じことを推測していますが、どうすれば私が欲しかったことを達成できますか? 返信ありがとう: – Aryan

+0

ちょっとピーター、ウルちゃん。ランナースレッドはすべてのスポーンスレッドを終了しました。私はちょうどテストブロックで50秒の睡眠を入れて、私も同様に応答の残りを得た:) – Aryan

+0

@Aryan、いくつかのリンクで私の更新をご覧ください。 –