JUnit टेस्ट चलाते समय क्लास नॉट एक्सेप्शन


117

ग्रहण में JUnit परीक्षण चलाने पर मुझे यह त्रुटि मिल रही है:

Class not found com.myproject.server.MyTest
java.lang.ClassNotFoundException: com.myproject.server.MyTest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)

मैंने JUnitक्लासपैथ में लाइब्रेरी जोड़ने की कोशिश की है, हालांकि मैं मावेन का उपयोग कर रहा हूं, और जेयूनिट लाइब्रेरी पोम निर्भरता में है।

मैंने पहले ही प्रोजेक्ट को साफ करने की कोशिश की है और एक्लिप्स के लिए जेयूनेट प्लगइन का उपयोग करके एक नया JUnit टेस्ट केस बनाया है, अभी भी वही त्रुटि हो रही है।


10
mvn clean testएक बार दौड़ने की कोशिश करें, यह सभी परीक्षण कक्षाओं को संकलित करेगा
जिगर जोशी

1
आप देख सकते हैं कि क्या com.myproject.server.MyTest बिन फ़ोल्डर में है? मेरा मतलब है कि अगर यह संकलित या निर्माण त्रुटि के कारण संकलित नहीं है, तो आपको यह त्रुटि मिलेगी।
विकस

क्या आप एक कक्षा या पूरी परियोजना का परीक्षण कर रहे हैं?
डोज़ज़ी D


1
मेरे मामले में मावेन का उपयोग करके परीक्षण चल रहा था, लेकिन अगर मैंने एक परीक्षण वर्ग पर राइट-क्लिक किया और रन अस -> JUnit टेस्ट का चयन किया, तो उसने ClassNotFoundException को रिपोर्ट किया। मैंने इसे प्रोजेक्ट पर राइट-क्लिक करके और प्रॉपर्टीज पर जाकर तय किया -> बिल्डर्स और फिर जावा बिल्डर के ऊपर मावेन प्रोजेक्ट बिल्डर को स्थानांतरित करना
xorcus

जवाबों:


120

ऐसा प्रतीत होता है क्योंकि जब आप उपयोग करते हैं तो केवल स्रोत कोड संकलित होता है mvn clean compile(मैं मावेन 3.1.0 का उपयोग कर रहा हूं, इसलिए मुझे यकीन नहीं है कि यह हमेशा इस तरह का व्यवहार करता है)।

यदि आप चलाते हैं mvn test, तो परीक्षण कोड भी संकलित करेगा, लेकिन फिर यह परीक्षण चलाता है (यदि आप उन्हें ग्रहण के माध्यम से चलाने की कोशिश कर रहे हैं तो यह तुरंत वांछनीय नहीं हो सकता है।) इसके आस-पास का तरीका test-compileआपके मावेन कमांड अनुक्रम में जोड़ना है। यदि आप एक कर mvn clean। उदाहरण के लिए, आप दौड़ेंगे mvn clean compile test-compile


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

धन्यवाद, इसके लिए मेरे लिए काम किया। लेकिन मेरे मामले में, इसके करीब तक काम नहीं किया गया और ग्रहण में परियोजना को फिर से खोल दिया।
परमेश कोरकुटी

सरल शब्दों में एक 'mvan स्वच्छ परीक्षण-संकलन' करते हैं और फिर ग्रहण में अपने Junit परीक्षण चलाते हैं। इसने मेरे लिए काम किया। धन्यवाद।
श्रीराम

103

मुझे अपने परीक्षणों में समान समस्या थी और वेब में कहीं नहीं मिला, कि आपको अपनी परियोजना के गुणों में बिल्ड पथ पर जाना होगा और जेआरई सिस्टम लाइब्रेरी के ऊपर मावेन डिपेंडेंसी को स्थानांतरित करना होगा । ऐसा लगता है कि मेरे लिए काम किया है।


1
इस धन्यवाद ने मेरी समस्या हल कर दी। जब मैं इसे चलाने की कोशिश कर रहा था तब वास्तविक परीक्षा में कक्षा को त्रुटि नहीं मिली थी। मुझे लगता है कि अतिरिक्त mvan बिल्ड लक्ष्यों को जोड़ने से पहले यह शायद एक बेहतर कदम है।
रोजर

8
इस पद में स्क्रीनशॉट के साथ इस विधि का वर्णन किया गया है (यदि ऊपर दिए गए चरण @ स्लेमक के उत्तर से स्पष्ट नहीं हैं)
nhylated

2
मैं ग्रहण मंगल 2 में जेआरई सिस्टम लाइब्रेरी के ऊपर मावेन प्रबंधित निर्भरताओं को स्थानांतरित नहीं कर सका, लेकिन मैं परियोजना पर राइट-क्लिक कर सकता हूं और गुण -> बिल्डर्स पर जा सकता हूं और फिर जावा बिल्डर के ऊपर मावेन प्रोजेक्ट बिल्डर को स्थानांतरित कर सकता हूं और इसने मेरे लिए काम किया।
एक्सक्रास

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

22

मुझे उसी समस्या का सामना करना पड़ा और मैं @ slomek के उत्तर का उपयोग करके इसे ठीक करने में सक्षम था लेकिन उसके बाद यह मुद्दा फिर से शुरू हो गया।

मैंने अंततः JUnit परीक्षण के रन कॉन्फ़िगरेशन में अपनी परियोजना के आउटपुट फ़ोल्डर को जोड़कर इसे ठीक किया। चरण हैं:

  • से अपने प्रोजेक्ट का आउटपुट फ़ोल्डर खोजें Project properties -> Java Build Path -> Default output folder
    • आमतौर पर यह है <project-folder>/bin
  • के लिए जाओ Run -> Run Configurations...
  • यूनिट टेस्ट के रन कॉन्फ़िगरेशन पर क्लिक करें और Classpathटैब पर क्लिक करें
  • स्पष्ट रूप से अपनी परियोजना के आउटपुट फ़ोल्डर को नीचे जोड़ दें User Entries- भले ही परियोजना वहां पहले से ही शामिल हो
    • Advanced -> Add folderआउटपुट फ़ोल्डर जोड़ने के लिए क्लिक करें

यह समस्या एक्लिप्स में अजीब प्रोजेक्ट सेटअप के कारण हो सकती है - उदाहरण के लिए नेस्टेड मावेन प्रोजेक्ट्स वाले सोर्स फोल्डर को सिंगल प्रोजेक्ट / फोल्डर के रूप में आयात किया गया (कम से कम मेरी परियोजना सेटअप कैसे हुई)।


बहुत बहुत धन्यवाद; मुझे यह समस्या थी। आपका फिक्स मेरे लिए काम किया; शीर्ष दो नहीं किया। ऊपर मतदान किया।
davtom

बिल्कुल प्रतिभाशाली! इस से अधिक उम्र के लिए मेरे सिर को खरोंच कर दिया। धन्यवाद!
RayCh

17

यदि यह समस्या केवल ग्रहण में होती है, तो कमांड प्रोजेक्ट निष्पादित करना -> चयनित प्रोजेक्ट पर क्लीन ... मदद कर सकता है।


धन्यवाद - यह वास्तव में मेरे लिए काम किया - Jave ईई ग्रहण gradlew
Abdeali Chandanwala

11

बिना किसी सुधार के यहाँ सब कुछ आज़माने के बाद, मैंने केवल ग्रहण को पुनः आरंभ करके अपनी समस्या को हल किया


5

मैंने मावेन अपडेट चलाकर अपना मुद्दा ठीक किया। अपना प्रोजेक्ट राइट क्लिक करें प्रोजेक्ट> मावेन> अपडेट प्रोजेक्ट


3

मेरे मामले में मेरे पास एक गलत मैवेन निर्देशिका संरचना थी।

जो इस प्रकार होना चाहिए:

/ src / test / java / com.myproject.server.MyTest

के बाद मैंने तय किया कि - सब कुछ एक आकर्षण की तरह काम किया।


2

मेरे मामले में, केवल अगले कदमों ने मुझे इस मुद्दे को हल करने में मदद की:

  1. प्रोजेक्ट-> गुण-> रन / डिबग सेटिंग।
  2. "....." के लिए "लॉन्च कॉन्फ़िगरेशन" में वर्गों / परियोजनाओं का चयन करें
  3. संपादित करें -> क्लासपाथ -> "डिफ़ॉल्ट प्रविष्टियों को पुनर्स्थापित करें"

धन्यवाद!! केवल इसने मेरी मदद की !!
सारांश

1

इससे पहले, इस मामले में, मैंने हमेशा mvan किया eclipse:eclipseऔर अपने ग्रहण को फिर से शुरू किया और यह काम किया। जीआईटी में प्रवास के बाद, इसने मेरे लिए काम करना बंद कर दिया जो कुछ अजीब है।

यहां मूल समस्या यह है कि श्री ग्रहण को संकलित वर्ग नहीं मिला। फिर, मैं आउटपुट फ़ोल्डर को प्रोजेक्ट / टारगेट / टेस्ट-क्लास के रूप में सेट करता हूं, जो डिफ़ॉल्ट रूप mvn clean installसे टेस्ट को स्किप किए बिना उत्पन्न होता है और वर्कअराउंड के साथ आगे बढ़ता है:

विकल्प 1: प्रत्येक परीक्षण मामले के लिए सेट करें

ग्रहण -> रन -> रन कॉन्फ़िगरेशन -> जुनेट के तहत-> mytest का चयन करें -> क्लासपाथ टैब के तहत-> उपयोगकर्ता प्रविष्टियां चुनें-> उन्नत-> फ़ोल्डर जोड़ें -> चुनें -> लागू करें-> चलाएँ

विकल्प 2: क्लासपैथ वेरिएबल बनाएं और इसे सभी टेस्ट मामलों के लिए क्लासपाथ में शामिल करें

ग्रहण -> विंडोज -> क्लासपैथ चर -> नया -> [नाम: Junit_test_cases_pp | पथ:] -> ठीक है फिर ग्रहण पर जाएं-> रन -> कॉन्फ़िगरेशन को चलाएं -> JUnit-> mytest का चयन करें -> classpath टैब के अंतर्गत -> उपयोगकर्ता प्रविष्टियां चुनें-> उन्नत-> classpath चर जोड़ें>> Junit_test_cases_cp-> ok- चुनें। > लागू-> चलाएँ

ऑनलाइन सभी सुझावों को आजमाने के बाद वर्तमान में मेरे लिए केवल यही एक काम है।


1

मुझे दो संसाधनों निर्देशिकाओं के साथ एक टेस्ट सोर्ससेट के साथ ग्रैडल प्रोजेक्ट के साथ एक ही समस्या थी।

यह स्निपेट एक मुख्य-मॉड्यूल.ग्रेड से आता है और परीक्षण के लिए एक संसाधन डीआईआर जोड़ता है।

sourceSets {
    test {
        resources {
            srcDir('../other-module/src/test/resources')
        }
    }
}

ऐसा करने से मेरे पास परियोजना के मुख्य-मॉड्यूल के स्रोत SourceSet के परीक्षण से संबंधित दो संसाधन निर्देशिकाएं थीं:

../other-module/src/test/resources src / test / Resources (मुख्य-मॉड्यूल फ़ोल्डर के सापेक्ष, जावा प्लगइन द्वारा स्वचालित रूप से जोड़ा गया)

मुझे पता चला है कि अगर मेरे पास दोनों स्रोत निर्देशिकाओं में एक ही नाम वाली दो फाइलें थीं, तो प्रक्रिया संसाधन चरण में कुछ गलत हो गया था। परिणामस्वरूप, कोई संकलन शुरू नहीं हुआ और इस कारण से बिन निर्देशिका में कोई .class की प्रतिलिपि नहीं बनाई गई, जहाँ JUnit कक्षाओं की तलाश कर रहा था। ClassNotFoundException सिर्फ दो फ़ाइलों में से एक का नाम बदलकर गायब हो गई।


1

NoClassDefFoundError वास्तव में इसका मतलब है कि यह वर्ग को प्रभावित नहीं कर सकता है। इसका वर्ग खोजने से कोई लेना- देना नहीं है। अशक्त स्ट्रिंग पर ट्रिम () कॉल करते समय मुझे यह त्रुटि मिली।

JUnit NullPointerException नहीं दिखाएगा। सामान्य रूप से चलने पर स्ट्रिंग शून्य नहीं होती है क्योंकि मैं स्ट्रिंग को एक गुण फ़ाइल से प्राप्त कर रहा हूं जो परीक्षणों के लिए उपलब्ध नहीं है।

मेरी सलाह है कि जब तक आपके टेस्ट पास न होने लगें तब तक क्लास से टुकड़ों को हटा दें। फिर आप यह निर्धारित कर सकते हैं कि कौन सी लाइन त्रुटि दे रही है।


0

मुझे अपने एक्लिप्स हेलियोस के साथ भी ऐसी ही समस्या थी जो जूनिट्स को डिबग कर रही थी। मेरी समस्या थोड़ी अलग थी क्योंकि मैं सफलतापूर्वक जूनियों को चलाने में सक्षम था, लेकिन जब मैं उसी JUNIT को डीबग करते हुए ClassNotFoundException प्राप्त कर रहा था।

मैं Stackoverflow.com और मंचों में उपलब्ध विभिन्न प्रकार के सभी प्रकार की कोशिश की है, लेकिन काम करने के लिए कुछ भी नहीं लगता है। दो दिनों के लिए इन मुद्दों के साथ मेरे सिर को पीटने के बाद, आखिरकार मैंने इसका हल निकाल लिया।

यदि कोई भी समाधान काम नहीं करता है, तो अपने कार्यक्षेत्र में बनाए गए .metadata फ़ोल्डर को हटा दें। इससे परियोजनाओं के आयात और आपके द्वारा किए गए सभी प्रकार के कॉन्फ़िगरेशन का एक अतिरिक्त ओवरहेड बन जाएगा, लेकिन ये निश्चित रूप से इन मुद्दों को हल करेंगे।

आशा है कि ये मदद करेंगे।


एक नोट के रूप में ... ऐसा करने से आपको अपने पर्यावरण का पुनर्निर्माण करना होगा। इसलिए जब यह समाधान हो सकता है कि आप इस बारे में अवगत
Bob

0

ये कदम मेरे लिए काम कर गया।

  • स्थानीय मावेन भंडार की सामग्री को हटा दें।
  • कमांड लाइन में रन क्लीन क्लीन स्थापित करें । (सीडी से पोम निर्देशिका)।
  • ग्रहण में परियोजना का निर्माण।

0

१- मंगल ग्रहण: ग्रहण

2- प्रोजेक्ट क्लीन सभी प्रोजेक्ट

3- पुनः आरंभ करें


0

यह एक और जवाब के रूप में उल्लेख करने योग्य है कि यदि आप ई-जीआईटी का उपयोग कर रहे हैं, और आपका क्लासपाथ कहने के कारण अपडेट हो जाता है, तो क्लोवर जैसे एक परीक्षण कवरेज उपकरण, कभी-कभी एक सफाई हिचकी होती है जो पूरी तरह से सामग्री को नहीं हटाती है /path/to/git/repository/<project name>/bin/

अनिवार्य रूप से, मैंने ग्रहण की त्रुटि लॉग दृश्य का उपयोग किया, पहचान की कि इस सफाई के प्रयास के दौरान समस्याएँ क्या थीं, स्रोत निर्देशिका में नेविगेट किया गया, और मैन्युअल रूप से <project name>/binनिर्देशिका को हटा दिया गया । एक बार जब मैं समाप्त हो गया तो मैं वापस ग्रहण किया और ताज़ा किया ( F5) मेरी परियोजना और त्रुटि दूर हो गई।


0

जांचें कि क्या आपका प्रोजेक्ट मावेन परियोजना के रूप में खोला गया है और न केवल एक नियमित जावा परियोजना है। वास्तव में एक नो-ब्रेनर, लेकिन यह वही कारण है जिसके कारण आप इसे याद कर सकते हैं।


0

यह "[ERROR] के कारण हो सकता है कि इस वातावरण में कोई संकलक उपलब्ध नहीं कराया गया है। शायद आप JDK के बजाय JRE पर चल रहे हैं?"


0

मैंने उसी मुद्दे का सामना किया था। मैंने इसे बाहरी JUnit जार निर्भरता को हटाकर हल किया था जिसे मैंने इंटरनेट से डाउनलोड करके बाहरी रूप से जोड़ा था। लेकिन फिर मैं प्रोजेक्ट में गया-> प्रॉपर्टीज-> बिल्ड पाथ-> ऐड लाइब्रेरी-> जूनिट-> ने वर्जन चुना (एक्स जूनिट 4) -> अप्लाई।

इसने स्वचालित रूप से निर्भरता को जोड़ा। इसने मेरी समस्या हल कर दी।


0

कुछ डमी परिवर्तन करने और परीक्षण वर्ग को बचाने से समस्या हल हो सकती है। यह स्वचालित रूप से .class का निर्माण करेगा


0

यह संकलित मुद्दा लगता है। प्रोजेक्ट को मावेन टेस्ट के रूप में चलाएं, फिर रन को जेनिट टेस्ट के रूप में चलाएं।



0

Pls जाँच करें कि क्या आपने निर्भरता के रूप में junit4 जोड़ा है।

जैसे

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

-5

आप मुख्य वर्ग और टेस्ट केस क्लास को / src / test / java में रखना भूल सकते हैं । इसे एक बार जांच लें।


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