2012-04-23 203 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