2012-04-23 17 views
3

У меня есть клиентские и серверные потоки в моих приложениях. Когда я запускаю эти приложения в качестве автономных приложений, эти потоки обмениваются данными.JUnit Thread Testing

Но когда я запускаю клиента как JUnit и сервер как автономный, клиентский поток умирает в течение нескольких секунд.

Я не мог понять, почему такое поведение.

+0

Вы получаете какое-либо исключение, когда нить умирает? – Thilo

+0

Нет исключений ... :( И странная вещь - это то же самое, что и автономное приложение. – Aryan

+0

Как именно поток «умереть»? Как вы знаете? – ShiDoiSi

ответ

8

Когда бегун JUnit завершает работу, все порожденные потоки и т. Д. Также убиты (как правило, они запускаются в отдельном экземпляре JVM).

Здесь (довольно старый) article describing the problem you experienced (библиотека GroboUtils, рекомендуемая, похоже, была оставлена ​​давным-давно). И another, recent one, с более современным решением, использующим новую инфраструктуру параллелизма Java.

Суть последнего решения заключается в том, что он запускает потоки через исполнителя, который публикует результаты прогонов через Future с. И Future.get блокируется до тех пор, пока нить не завершит задачу, автоматически сохраняя тесты JUnit. Вы можете адаптировать этот трюк к своему делу.

+0

Да, я догадываюсь о том же, но как я могу добиться того, чего я тогда хотел? Спасибо за ответ :) – Aryan

+0

Эй, Питер, Ур точно в порядке. бегущая нить прекратила все нити. Я только что поставил сон на 50 секунд в тестовом блоке, и я тоже получил ответы от остальных ответов: Спасибо :) – Aryan

+0

@ Арий, пожалуйста, посмотрите мое обновление с некоторыми ссылками. –