जुनिट यूनिट टेस्ट के लिए जेवीएम पैरामीटर कैसे सेट करें?


95

मेरे पास कुछ जुनिट यूनिट परीक्षण हैं जिन्हें चलाने के लिए बड़ी मात्रा में हीप-स्पेस की आवश्यकता होती है - अर्थात 1G। (वे एक वेबस्टार्ट ऐप के लिए स्मृति-गहन कार्यक्षमता का परीक्षण करते हैं जो केवल पर्याप्त हीप-स्पेस के साथ चलेगा, और आंतरिक रूप से विन 7 64-बिट मशीनों पर चलाया जाएगा - इसलिए परीक्षणों को फिर से डिज़ाइन करना एक व्यावहारिक सुझाव नहीं है।)

मैं इंटेलीज आईडीईए में विकसित कर रहा हूं, इसलिए मुझे पता है कि मैं परीक्षण वर्ग के लिए जेवीएम पैरामीटर (जैसे -Xmx1024M) सेट कर सकता हूं। हालाँकि, यह केवल संपूर्ण परीक्षण वर्ग को चलाने के लिए है - अगर मैं एक व्यक्तिगत परीक्षण चलाना चाहता हूं, तो मुझे उस परीक्षण विधि के लिए रन कंफिगरेशन को फिर से बनाना होगा।

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

निर्माण चक्र के लिए, हम मावेन का उपयोग कर रहे हैं, इसलिए मुझे पता है कि उसके लिए जेवीएम मापदंडों को कैसे निर्दिष्ट किया जाए।

इसलिए: - मैं JVM मापदंडों को निर्दिष्ट करने का एक तरीका खोज रहा हूं जो पूरे परीक्षण वर्ग और व्यक्तिगत परीक्षण विधियों के लिए लागू होगा; और - मैं किसी भी मशीन पर IDEs में उन विनिर्देश को साझा करना चाहूंगा (रिपॉजिटरी से कोड उठाया)।


मुझे संदेह है कि यह संभव है। दी गई IDE के लिए, भर में मशीनें, यह संभव होना चाहिए। लेकिन आईडीई में मैं नहीं देखता कि कैसे।
बजे जेबी निज़ेट

@ जेबीएनज़ेट - मुझे दी गई आईडीई के लिए मशीनों को लेने में खुशी होगी (यह Intellij IDEA प्रदान करना)।
ment

जवाबों:


48

IntelliJ में आप प्रत्येक रन कॉन्फ़िगरेशन के लिए डिफ़ॉल्ट सेटिंग्स निर्दिष्ट कर सकते हैं। में चलाएँ / डीबग विन्यास संवाद (एक आप परीक्षण प्रति कॉन्फ़िगर ढेर करने के लिए उपयोग करें) पर क्लिक करें चूक और JUnit । ये सेटिंग्स प्रत्येक नए JUnit परीक्षण कॉन्फ़िगरेशन पर स्वचालित रूप से लागू होंगी। मुझे लगता है कि ग्रहण के लिए समान सेटिंग मौजूद है।

हालाँकि, इस तरह की सेटिंग्स (कम से कम इंटेलीज में) पूरे वातावरण में स्थानांतरित करने का कोई सरल विकल्प नहीं है। आप अपनी रिपॉजिटरी में इंटेलीज प्रोजेक्ट फाइल कर सकते हैं: यह काम कर सकता है, लेकिन मैं इसकी सिफारिश नहीं करता।

आप जानते हैं कि इन्हें कैसे सेट करना है maven-surefire-plugin। अच्छा। यह सबसे पोर्टेबल तरीका है (उदाहरण के लिए पॉमली का उत्तर देखें)।

बाकी के लिए - आपको याद रखना चाहिए कि JUnit परीक्षण के मामले सिर्फ जावा कक्षाओं का एक समूह हैं, एक स्वसंपूर्ण कार्यक्रम नहीं। यह रनर पर निर्भर है (यह एक स्टैंडअलोन JUnit रनर हो, आपकी IDE, maven-surefire-pluginउन विकल्पों को सेट करने के लिए। यह कहा जा रहा है कि उन्हें सेट करने का कोई "पोर्टेबल" तरीका नहीं है, ताकि रनर के लिए मेमोरी सेटिंग्स लागू न हों।

आपको एक उदाहरण देने के लिए: आप Xmxएक सर्वलेट विकसित करते समय पैरामीटर को परिभाषित नहीं कर सकते - यह परिभाषित करने के लिए कंटेनर पर निर्भर है। आप यह नहीं कह सकते: "इस सर्वलेट को हमेशा चलाया जाना चाहिए Xmx=1G


रन / डिबग कॉन्फ़िगरेशन कहां है? जब मैं परीक्षण चलाता हूं तो मैं इसे प्राथमिकता या संदर्भ मेनू में नहीं देखता हूं?
डीन हिलर

2
ध्यान दें कि यह मौजूदा JUnit रन कॉन्फ़िगरेशन को नहीं बदलेगा, केवल वे ही जो डिफॉल्ट्स को बदलने के बाद बनाए गए हैं। आपको मौजूदा को मैन्युअल रूप से बदलना होगा।
मिकफ हए

78

मावेन में आप अचूक प्लगइन को कॉन्फ़िगर कर सकते हैं

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <argLine>-Xmx256M</argLine>
    </configuration>
</plugin>

यदि आप बिल्ड के लिए मावेन का उपयोग करते हैं तो इस कॉन्फ़िगरेशन को स्रोत ट्री में ले जाया जाएगा और परीक्षण किए जाने पर लागू किया जाएगा। Maven अचूक प्लगिन प्रलेखन देखें ।


1
@ptomli - मैं हमेशा "निश्चित रूप से ..." वाली टिप्पणियों पर अविश्वास करता हूं। Intellij maven इंटीग्रेशन maven बिल्ड चक्र पर कार्य चलाने के दौरान पोम प्लगइन कॉन्फ़िगरेशन का उपयोग करता है। आईडीई में यूनिट परीक्षणों को चलाना एक अलग प्रक्रिया है, और डिफ़ॉल्ट रूप से बिल्ड प्रक्रिया का कोई ज्ञान नहीं है। मेरी जानकारी के अनुसार, इनको जोड़ने का कोई तरीका नहीं है - हालाँकि मुझे ख़ुशी है अन्यथा बताया जा रहा है। क्या यह कुछ ऐसा है जिसे आप जानते हैं / किया है - किस मामले में, आप इसे कैसे कर सकते हैं?
बजे

1
मुझे यकीन नहीं है कि इंटेलीज में यह संभव है। टीबीएच, भले ही यह था, मैं उस दृष्टिकोण का उपयोग नहीं करना चाहता, क्योंकि मौके हैं, अगर मैं आईडीई में इकाई परीक्षण चला रहा हूं, तो मैं आईडीई डीबगर का लाभ उठाना चाहता हूं, जो मैं नहीं कर सकता था मावन परीक्षण चलाकर।
amaidment

5
वास्तव में, इंटेलीजे के Maven एकीकरण है जब व्यक्ति इकाई परीक्षण को क्रियान्वित करने Maven अचूक विन्यास का उपयोग करें। ऊपर दिए गए मावेन विन्यास का उपयोग -Xmx256Mकरने पर जावा कमांड लाइन को पारित किया जाएगा, जब आपकी इकाई परीक्षणों को सीधे IntelliJ से निष्पादित किया जाएगा। इसने अभी-अभी मुझे बाहर निकाल दिया है :-(
Kkkev

1
FYI करें: नेटबीन्स भी अपने परीक्षण चलाने के लिए मावेन स्यूफायर का उपयोग करता है
फेरीबिग

1
@Kkkev IntelliJ का मेवेन एकीकरण, IntelliJ में एक व्यक्तिगत परीक्षण चलाने से अलग है। पहला एक मावेन रन कॉन्फ़िगरेशन (और इसलिए तर्क पढ़ता है) का उपयोग करता है, दूसरा एक JUnit, TestNG ... कॉन्फ़िगरेशन का उपयोग करता है।
andresp


14

इस समर्थन प्रश्न के अनुसार https://intellij-support.jetbrains.com/hc/en-us/community/posts/206165789-JUnit-default-heap-size-overridden-

IntXJ जूनिट टेस्ट रन के लिए -Xmx तर्क मावेन-अचूक-प्लगइन से आएगा, अगर यह सेट है।

यह pom.xml स्निपेट

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>-Xmx1024m</argLine>
            </configuration>
        </plugin>

IntelliJ 2016.2.4 के साथ जूनियर टेस्ट रन के लिए -Xmx1024 तर्क पास करना प्रतीत होता है।


13

मैं उन अन्य लोगों से सहमत हूं जिन्होंने कहा कि इन सेटिंग्स को वितरित करने का कोई सरल तरीका नहीं है।

ग्रहण के लिए: अपने सहयोगियों को निम्नलिखित सेट करने के लिए कहें:

  • विंडोज वरीयताएँ / जावा / स्थापित JREs:
  • उचित JRE / JDK का चयन करें (या उन सभी के लिए करें)
  • संपादित करें
  • डिफ़ॉल्ट VM तर्क: -Xmx1024m
  • खत्म करो, ठीक है।

उसके बाद सभी परीक्षण चलेंगे -Xmx1024mलेकिन दुर्भाग्य से आपने इसे हर ग्रहण स्थापना में निर्धारित किया है। हो सकता है कि आप एक कस्टम एक्लिप्स पैकेज बना सकते हैं जिसमें यह सेटिंग है और यह आपको सहकर्मियों को देता है।

निम्नलिखित कार्य प्रक्रिया भी मदद कर सकती है: यदि आईडीई एक परीक्षण नहीं चला सकता है तो डेवलपर को यह जांचना चाहिए कि मावेन इस परीक्षण को चला सकता है या नहीं।

  • यदि मावेन इसे चला सकता है तो विफलता का कारण आमतौर पर डेवलपर की आईडीई की सेटिंग है। डेवलपर को इन सेटिंग्स को जांचना चाहिए।
  • यदि मावेन भी परीक्षण नहीं चला सकता है , तो डेवलपर जानता है कि विफलता का कारण आईडीई नहीं है, इसलिए वह / वह आईडीई का उपयोग करके परीक्षण को डिबग कर सकता है।

यह कहना कि परियोजना को मावेन के साथ बनाना बहुत मददगार नहीं है। (हम केवल मावेन के साथ निर्माण कर रहे हैं।) हालांकि, आपके सुझाव में निहित है कि हमें मावेन बिल्ड चक्र के भाग के रूप में केवल परीक्षण चलाने चाहिए - हम अक्सर आईडीई में डिबगिंग के लिए समान परीक्षणों का उपयोग करते हैं। (आगे के लाभ के साथ कि एक बार कुछ डिबग हो जाने के बाद, उन परीक्षणों को बिल्ड साइकल में रखना आसान होता है।)
भुगतान

ठीक - लेकिन अब तुम सिर्फ टोमाज़ के जवाब दोहरा रहे हैं, लेकिन ग्रहण विशिष्टताओं के साथ ...
amaidment

2

आप systemPropertyVariables का उपयोग कर सकते हैं (java.protocol.handler.pkgs आपका JVM नाम है:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
        <systemPropertyVariables>
            <java.protocol.handler.pkgs>com.zunix.base</java.protocol.handler.pkgs>
            <log4j.configuration>log4j-core.properties</log4j.configuration>
        </systemPropertyVariables>
    </configuration>
</plugin>

http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html


1

Java.library.path JVM पैरामीटर तक सीमित एक ग्रहण विशिष्ट वैकल्पिक विकल्प एक विशेष स्रोत फ़ोल्डर के लिए इसे सेट करने की अनुमति देता है, बजाय एक अन्य प्रतिक्रिया में प्रस्तावित पूरे jdk के लिए:

  1. स्रोत फ़ोल्डर का चयन करें जिसमें प्रोग्राम शुरू करने के लिए रहता है (आमतौर पर स्रोत / परीक्षण / जावा)
  2. उस फ़ोल्डर के लिए गुण पृष्ठ खोलने के लिए alt दर्ज करें
  3. बाएं पैनल में मूल का चयन करें
  4. मूल पथ संपादित करें। पथ कार्यक्षेत्र के लिए निरपेक्ष या सापेक्ष हो सकता है, दूसरा अधिक परिवर्तनशील हो सकता है।

विस्तार से दिलचस्पी रखने वालों के लिए क्यों maven argline टैग को systemProperties एक के लिए पसंद किया जाना चाहिए, उदाहरण के लिए:

मावेन टेस्ट (lwjgl) में देशी जेएनआई फाइलें उठाएं


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.