2013-07-20 15 views
8

में डीबग Arquillian परीक्षण मैं जावा ईई परियोजना जिसमें मैं JUnit साथ Arquillian परीक्षणों का उपयोग पर JBoss 7 (विंडोज़) की है। टेस्ट ठीक काम कर रहे हैं हालांकि मैं उन्हें डीबग नहीं कर सकता।इंटेलीजे

जो मैंने गुगल किया है (https://community.jboss.org/wiki/WhyDontBreakPointsWorkWhenDebugging) मैं समझता हूं कि आर्किलीयन परीक्षण अलग-अलग वीएम में चल रहे हैं इसलिए IntelliJ उन्हें डीबग नहीं कर सकता है। मुझे सॉकेट पर दूरस्थ रूप से उस मशीन से कनेक्ट करने के लिए IntelliJ की आवश्यकता है, लेकिन मुझे नहीं पता कि यह कैसे करें।

मुझे यह धागा मिला: Debugging with Arquillian in IntelliJ - Managed Container हालांकि मुझे नहीं पता कि यह कैसे काम करे।

इसके अलावा, मैं इस सूत्र के ऊपर कदम रखा: http://devnet.jetbrains.com/message/5253623?tstart=0 इसलिए मैं अपने pom.xml में उम्मीद है कि appropriet अचूक हिस्सा भरा है, लेकिन यह मदद नहीं था:

<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 में चल रहे हैं और उदाहरण के लिए आप आईडीई में सीधे अपना परीक्षण डीबग कर सकते हैं।

इस मामले में Surefire कॉन्फ़िगरेशन महत्वपूर्ण नहीं है, क्योंकि आप अपने आईडीई में डीबग करना चाहते हैं (जब तक कि आप अपने आईडीई के भीतर से मेवेन लक्ष्यों को निष्पादित नहीं कर रहे हों)।

प्रबंधित और दूरस्थ कंटेनर के लिए आपको वास्तविक कंटेनर डीबग करने की आवश्यकता है। इसके लिए आपको रिमोट कंटेनर में सही 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' पैरामीटर है। मुझे लगता है कि अब मुझे इंटेलिजे को डीबग सत्र से कनेक्ट करना चाहिए, लेकिन मुझे नहीं पता कि यह कैसे करना है। –

+1

अंत में मैं अपना परीक्षण डीबग कर सकता हूं। मैंने जेबीओएस वीएम चलाने के लिए 'एमवीएन टेस्ट-पैराक-जेबोसास-प्रबंधित' का इस्तेमाल किया और फिर मैंने उस वीएम से कनेक्ट करने के लिए इंटेलिजे में रिमोट प्रोफाइल का इस्तेमाल किया। क्या इंटेलिज में इसे स्वचालित रूप से बनाना संभव है? मेरा मतलब है कनेक्टिंग से पहले 'एमवीएन टेस्ट' चलाना? –

+0

मुझे यह भी जानना है कि आइडिया आईडीई से एक साधारण यूनिट परीक्षण की तरह अरुविलियन परीक्षण डीबग कैसे करें – zbig

1

मैं या तो Maven द्वारा या इंटेलीजे द्वारा Arqullian परीक्षण चला सकते हैं। मैं कंटेनर एम्बेडेड का उपयोग करें। सबसे महत्वपूर्ण बात यह JBoss Hom कॉन्फ़िगर करने के लिए है e arqullian.xml पर और न ही केवल मैवेन कॉन्फ़िगरेशन में इंटेलिजे को पता है कि जेबॉस घर कहां है।

<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> 

डिबगिंग और चल परीक्षण के लिए महत्वपूर्ण इंटेलीजे में:

किसी कारण से आप प्रवेश प्रबंधक का उल्लेख करना होगा सक्षम एम्बेडेड 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> 

लेकिन इंटेलीजे Maven पर इन प्लगइन विन्यास के बारे में परवाह नहीं है और आप इसे परीक्षण का मामला विन्यास पर सीधे सेट करना होगा। मुझे बेहतर समाधान नहीं मिला। एम्बेडेड कंटेनर arqullian.xml में जावा वीएम कॉन्फ़िगरेशन की परवाह नहीं करता है।

IntelliJ Arequllian test configuration

यहाँ हमेशा दूरस्थ डीबगिंग सोचा डिबग करने के लिए संभावना है। मुझे आईडीई में ऐसा करना पसंद है। मेरे लिए यह अधिक confortable तरीका है। जब आप रिमोट डीबगिंग को सक्षम करना चाहते हैं तो आपको एम्बेडेड कंटेनर के लिए JAVA_OPT पर कॉन्फ़िगरेशन सेट करना होगा और न ही arqullian.xml पर।

संबंधित मुद्दे