2013-06-20 2 views
1

Я хочу выполнить единичные тесты на встроенном Jetty с CDI/Weld параллельно в одной JVM.Параллельные тесты с пристанью и сваркой

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

org.jboss.weld.exceptions.DefinitionException: 
    Exception List with 1 exceptions:|Exception 0 
    :|java.lang.RuntimeException: javax.naming.NameAlreadyBoundException: 
    com<|?at com.sun.jersey.server.impl.cdi.CDIExtension.initialize(CDIExtension.java:196) 

Полный стек состоит из pastebin.

Серверы и контекст изолированы на разных экземплярах сервера и портах. Однако Weld этого не понимает, хотя он обнаруживает контейнер Jetty и, кажется, использует какое-то общее состояние (возможно, это специфичный Jetty?).

Кто-нибудь сталкивался с этой проблемой или имел подсказку, как сообщить Weld, что он не должен регистрироваться дважды?

+0

Почему бы просто не поставить здесь стек? –

+0

Поскольку он довольно длинный, я не был уверен, насколько это было бы понятно. –

ответ

2

Вы можете попробовать развиваться в каждом тесте, так что все они сделаны в разных JVM. Похоже, что Weld хранит bean-компоненты на JVM (что имеет смысл), и когда новый сервер снова запускается через загрузчик.

+0

Да, я изначально думал, что это была сварка/причал интеграции, которая делала это, но, глядя ближе, я думаю, @LightGuard является правильным, и его решение кажется жизнеспособным для загрузки –

+0

Это была моя первая идея, проблема, я вижу, что я бы должны разбить каждый отдельный метод тестирования на собственный тестовый класс. Но, может быть, это стоит того времени, когда я должен это проверить. –

+0

Еще один момент: если контейнерный каркас, такой как Weld, изолирует это? Потому что развертывание одного и того же бина дважды в разных контекстах работает. –

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