Déboguer des tests Arquillian dans IntelliJ

J’ai un projet Java EE dans lequel j’utilise des tests Arquillian avec JUnit sur JBoss 7 (Windows). Les tests fonctionnent bien, mais je ne peux pas les déboguer.

D’après ce que j’ai cherché sur Google ( https://community.jboss.org/wiki/WhyDontBreakPointsWorkWhenDebugging ), je comprends que les tests Arquillian sont exécutés dans une machine virtuelle distincte, par conséquent, IntelliJ ne peut pas les déboguer. J’ai besoin d’IntelliJ pour me connecter à cette machine à distance via socket, mais je ne sais pas comment le faire.

J’ai trouvé ce fil de discussion: Débogage avec Arquillian dans IntelliJ – Managed Container Cependant, je ne sais pas comment le faire fonctionner.

De plus, je suis passé sur ce fil: http://devnet.jetbrains.com/message/5253623?tstart=0 alors j’ai rempli, espérons-le, une partie sûre dans mon pom.xml mais cela n’a pas aidé:

 maven-surefire-plugin 2.4.3  true false   

Quelqu’un pourrait-il me faire une guilde s’il vous plaît comment déboguer des tests dans une telle configuration?

Tout d’abord dépend du type de conteneur que vous utilisez – géré, distant ou incorporé. Voir aussi https://docs.jboss.org/author/display/ARQ/Containers . Pour ces derniers, les tests s’exécutent sur la même machine virtuelle et vous pouvez par exemple déboguer votre test directement dans l’EDI.

Dans ce cas, la configuration de Surefire n’est pas importante car vous souhaitez déboguer dans votre IDE (sauf si vous exécutez des objectives maven à partir de votre IDE).

Pour les conteneurs gérés et distants, vous devez déboguer le conteneur actuel. Pour cela, vous devez passer les bonnes options JVM au conteneur distant, afin que vous puissiez ouvrir une session de débogage à distance. Une façon de faire est arquillian.xml :

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

    target/artifacts    ${jbossTargetDir} -Xmx1024m -XX:MaxPermSize=512m -Xnoagent -Djava.comstackr=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 true   

La partie importante de l’exemple ci-dessus étant javaVmArguments .

Je peux exécuter des tests Arqullian par Maven ou par IntelliJ. J’utilise un conteneur intégré. Le plus important est de configurer le répertoire principal de JBoss dans arqullian.xml, ainsi que simplement dans la configuration de Maven pour qu’IntelliJ sache où se trouve le répertoire principal de JBoss.

   testing/target/artifacts     target/wildfly-8.1.0.Final target/wildfly-8.1.0.Final/modules true   

IMPORTANT pour le débogage et l’exécution du test dans IntelliJ:

Pour une raison quelconque, vous devez spécifier que le gestionnaire de journalisation puisse exécuter JBoss intégré. Pour Maven, c’est simple et vous pouvez le configurer:

  org.apache.maven.plugins maven-surefire-plugin   always  org.jboss.logmanager.LogManager  false   

Mais l’IntelliJ ne se soucie pas de la configuration de ce plugin chez Maven et vous devez le définir directement lors de la configuration du scénario de test. Je n’ai pas trouvé de meilleure solution. Le conteneur incorporé ne se préoccupe pas de la configuration de la machine virtuelle Java dans arqullian.xml.

Configuration de test IntelliJ Arequllian

Il y a toujours possibilité de déboguer par le débogage distant. J’aime le faire à l’IDE. Pour moi c’est plus confortable. Lorsque vous souhaitez activer le débogage distant, vous devez définir la configuration sur JAVA_OPT pour le conteneur incorporé, ni sur arqullian.xml.