2012-04-23 98 views
3

我的應用程序中有客戶端和服務器線程。當我將這些應用程序作爲獨立應用程序運行時,這些線程正確通信。JUnit線程測試

但是,當我運行客戶端作爲JUnit和服務器作爲獨立,客戶端線程在幾秒鐘內死亡。

我無法得到,爲什麼這樣不同的行爲。

+0

當線程死亡時,你會得到任何異常嗎? – Thilo 2012-04-23 08:15:52

+0

沒有例外... :( 而且奇怪的事情是獨立的應用程序相同的工作 – Aryan 2012-04-23 08:19:21

+0

線程「死」究竟如何?你怎麼知道? – ShiDoiSi 2012-04-23 08:23:33

回答

8

當JUnit運行程序終止時,所有派生的線程等也被終止(因爲它很可能在單獨的JVM實例中運行)。

這是一個(相當老)article describing the problem you experienced(它推薦的GroboUtils庫似乎早已被廢棄了)。 another, recent one,使用新的Java併發框架的更現代的解決方案。

後一種解決方案的要點是它通過執行程序運行線程,執行程序通過Future s發佈運行結果。並且Future.get會阻塞,直到線程完成任務,自動保持JUnit測試活動。你或許可以將這個技巧應用於你的案例。

+0

是的,我猜測是一樣的,但是我怎樣才能達到我想要的東西呢? 感謝您的回覆:) – Aryan 2012-04-23 08:28:34

+0

嘿,彼得,烏爾正好。亞軍線程終止了所有的spawn線程。我剛剛在一個測試塊中放置了50秒的睡眠時間,並且我得到了其餘的回覆以及:) 謝謝:) – Aryan 2012-04-23 08:32:34

+0

@Aryan,請參閱我的更新以及一些鏈接。 – 2012-04-23 08:38:48