Модульное тестирование частей приложения, использующих Thread Local

Я пытаюсь реализовать модульное тестирование в веб-приложении, и некоторые его части используют ThreadLocal.

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

Похоже, что Junit выполняет все свои тесты, используя один поток, а именно основной поток.

Мне нужно иметь возможность присваивать различные значения моей переменной ThreadLocal.

Кто-нибудь сталкивался с таким сценарием? Что вы, ребята, порекомендуете.


person Sudarshan    schedule 29.02.2012    source источник


Ответы (3)


Grobutils поддерживает выполнение многопоточных тестов, что позволит вам протестировать ваши переменные ThreadLocal.

http://groboutils.sourceforge.net/testing-junit/using_mtt.html

person nwinkler    schedule 29.02.2012

Я бы просто запускал потоки в своем модульном тесте.

Я рекомендую вам использовать Futures и выполнить их с помощью ThreadPoolExecutor.

person Bohemian♦    schedule 29.02.2012
comment
Не повлияет ли это на транзакционный характер ваших тестов? Насколько я понимаю, транзакция привязана к текущему потоку выполнения. Я говорю о весенних транзакционных модульных тестах. - person Sudarshan; 29.02.2012

Может быть достаточно украсить соответствующие методы тестирования тайм-аутом, то есть @Test(timeout=100). Обратите внимание на «ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ ПОТОКОВ» в Test::timeout. , особенно при использовании аннотаций @BeforeClass и @After.

person mgaert    schedule 19.09.2016