2016-10-06 4 views
3

У меня есть код, который забывает установить флаг демона в потоке. Таким образом, методы main никогда не заканчиваются. В конце концов, я отслежу его, но мне интересно: есть ли способ отразить факт существования не-демона, чтобы тест JUnit (или testng или любой другой) мог жаловаться в этом случае? Обратите внимание, что эти тестовые среды организуют System.exit, чтобы лишние потоки не отображались как зависания.Могу ли я обнаружить просочившийся поток в тесте Junit?

+0

Как бы вы хотели, чтобы это сообщалось? Просто, что такой поток существует, или какой-то pin-point, на котором был создан поток? – Brick

+0

Просто его существование. ThreadMXBean не показывает флаг daemon, если бы это было так, этого было бы достаточно. – bmargulies

ответ

2

Вы можете получить список всех запущенных потоков (Get a List of all Threads currently running in Java):

Set<Thread> threadSet = Thread.getAllStackTraces().keySet(); 

Затем вы можете перемещаться по списку в каком-то тесте, который вы пишете вызывающие Thread.isDaemon(). Вам, вероятно, придется выкинуть некоторые потоки, соответствующие JVM или JUnit framework, но это, вероятно, возможно, проверяя другие аспекты потоков, например их имя.

Смежные вопросы