2013-07-20 5 views
8

У меня есть проект Java EE, в котором я использую Arquillian тестов с JUnit на JBoss 7 (Windows). Тесты работают нормально, но я не могу их отлаживать.Debug Arquillian тесты в IntelliJ

От того, что я искал в google (https://community.jboss.org/wiki/WhyDontBreakPointsWorkWhenDebugging) Я понимаю, что тесты Arquillian запускаются в отдельной VM, поэтому IntelliJ не может их отлаживать. Мне нужно, чтобы IntelliJ подключался к этой машине удаленно через сокет, но я не знаю, как это сделать.

Я нашел эту тему: Debugging with Arquillian in IntelliJ - Managed Container Однако я не знаю, как заставить ее работать.

Также я перешагнул эту тему: http://devnet.jetbrains.com/message/5253623?tstart=0 поэтому я заполнил надеюсь appropriet безошибочной части в моей pom.xml, но это не помогло:

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.4.3</version> 
     <configuration> 
      <debugForkedProcess>true</debugForkedProcess> 
     <skip>false</skip> 
    </configuration> 
</plugin> 

Может кто-нибудь гильдию, пожалуйста, как отлаживать тесты в такой конфигурации?

ответ

7

Прежде всего, это зависит от используемого типа контейнера - управляемого, удаленного или встроенного. См. Также https://docs.jboss.org/author/display/ARQ/Containers. Для последних тесты выполняются в одной JVM, и вы можете, например, отладить ваш тест непосредственно в среде IDE.

Конфигурация Surefire в этом случае не важна, потому что вы хотите отлаживать в своей среде IDE (если вы не выполняете цели maven из вашей среды IDE).

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

http://jboss.org/schema/arquillian/arquillian_1_0.xsd ">

<!-- Need to set the default protocol and use resource filtering, because of https://issues.jboss.org/browse/ARQ-579 --> 
<defaultProtocol type="Servlet 3.0"/> 

<engine> 
    <property name="deploymentExportPath">target/artifacts</property> 
</engine> 


<container qualifier="incontainer"> 
    <configuration> 
     <property name="jbossHome">${jbossTargetDir}</property> 
     <property name="javaVmArguments">-Xmx1024m -XX:MaxPermSize=512m -Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005</property> 
     <property name="allowConnectingToRunningServer">true</property> 
    </configuration> 
</container> 

Важную роль в пример выше javaVmArguments.

+1

Я использую управляемый контейнер. Я попытался сыграть с вашим предложением, но при запуске отладки я вижу в консоли: «Прослушивание транспорта dt_socket по адресу: 5005», и больше ничего не происходит. Я узнал, что это из-за параметра 'susspend = y'. Думаю, теперь я должен позволить IntelliJ подключиться к сеансу отладки, но я не знаю, как это сделать. –

+1

Наконец-то я смог отладить мой тест. Я использовал 'mvn test -Parq-jbossas-managed' для запуска JBoss VM, а затем я использовал удаленный профиль в IntelliJ для подключения к этой виртуальной машине. Можно ли сделать это автоматически в Intellij? Я имею в виду запуск 'mvn test' перед подключением? –

+0

Мне также хотелось бы знать, как отлаживать тест Arquillian, как простой модульный тест от Idea IDE – zbig

1

Я могу запускать тесты Arqullian либо Maven, либо IntelliJ. Я использую встроенный контейнер. Самое главное - настроить JBoss hom e at arqullian.xml или просто в конфигурации Maven, чтобы IntelliJ знал, где находится дом JBoss.

<arquillian xmlns="http://jboss.org/schema/arquillian" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://jboss.org/schema/arquillian 
    http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> 

<engine> 
    <property name="deploymentExportPath">testing/target/artifacts</property> 
</engine> 

<container qualifier="jbossas-managed" default="true"> 
    <configuration> 

     <!-- JBoss embedded does not use this property 
     <property name="javaVmArguments">-java.util.logging.manager=org.jboss.logmanager.LogManager -Xmx512m -XX:MaxPermSize=256m -Djava.util.logging.manager=org.jboss.logmanager.LogManager</property> 
     --> 

     <property name="jbossHome">target/wildfly-8.1.0.Final</property> 
     <property name="modulePath">target/wildfly-8.1.0.Final/modules</property> 
     <property name="allowConnectingToRunningServer">true</property> 
    </configuration> 
</container> 

ВАЖНО для отладки и тестирования работает в IntelliJ:

С какой-то причине необходимо указать менеджер журналирования, чтобы иметь возможность запустить встроенный JBoss. Для Maven легко и вы можете установить его в конфигурации:

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
       <!-- Fork every test because it will launch a separate AS instance --> 
       <forkMode>always</forkMode> 
       <systemPropertyVariables> 
        <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> 
       </systemPropertyVariables> 
       <redirectTestOutputToFile>false</redirectTestOutputToFile> 
      </configuration> 
     </plugin> 

Но IntelliJ не заботится об этих плагинов конфигурации в Maven, и вы должны установить его непосредственно в конфигурации тестового примера. Я не нашел лучшего решения. Вложенный контейнер не заботится о конфигурации Java VM в файле arqullian.xml.

IntelliJ Arequllian test configuration

Здесь всегда есть возможность отладки Повсеместно удаленной отладки. Мне нравится делать это в IDE. Для меня это более комфортабельный способ. Если вы хотите включить удаленную отладку, вы должны установить конфигурацию JAVA_OPT для встроенного контейнера или arqullian.xml.

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