java.lang.NoClassDefFoundError in junit



eclipse (10)

أتلقى هذا الخطأ في جافا في كود اختبار junit. نظرت إلى الشبكة وأردت أنني بحاجة إلى إضافة junit.jar في مسار الصنف.

في Eclipse لقد قمت بإضافته في classpath من نوافذ Project Properties لكنني لا أزال أحصل على خطأ في التهيئة. ماذا يجب أن أفعل..؟

هذا هو التتبع الكامل للخطأ:

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:13)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:32)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:41)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:31)
    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)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 25 more

https://ffff65535.com


  1. Eclipse -> القائمة العلوية -> Run -> Run Configurations
  2. احذف جميع أحداث الاختبار. قد يظهر الاختبار الخاص بك باسم YourTest.Method_1 (). احذف ذلك أيضًا.
  3. إعادة التشغيل. اسمحوا Eclipse بناء تكوين جديد.

إضافة: محلي لقد قمت بإنشاء "مكتبة المستخدم" وإضافتها إلى المشاريع التي لديها

hamcrest-core-1.3.jar

junit-4.12.jar


  1. انقر بزر الماوس الأيمن فوق المشروع في "مستكشف الحزم"> انقر فوق "خصائص"
  2. انتقل إلى Java Build Path> علامة التبويب "المكتبات"
  3. انقر فوق الزر "إضافة مكتبة"
  4. اختر JUnit
  5. انقر فوق التالي.

يجب أن تكون قادرا على التعامل معها من هناك.


إذا كان لديك أكثر من إصدار واحد من جافا ، فقد يتداخل مع برنامجك.

أقترح عليك تحميل JCreator.

عند القيام بذلك ، انقر فوق تكوين وخيارات وملفات تعريف JDK. احذف الإصدارات القديمة من Java من القائمة. ثم انقر فوق زر التشغيل. يجب أن يظهر برنامجك.

إذا لم يحدث ذلك ، فاضغط على ctrl + alt + O ثم اضغط على زر التشغيل مرة أخرى.


الفئة org / hamcrest / SelfDescppinging غير على مسار فئة وقت التشغيل.


حتى Junit4.11.jar ليس له hamcrest-core.jar. أضفت صراحة في مسار الصنف وتم حل المشكلة.


على Eclipse ، تمكنت من حل المشكلة المذكورة أعلاه باتباع الخطوات التالية:

انقر بزر الماوس الأيمن على ملف الاختبار الذي ترغب في تشغيله ، ثم اختر Run As -> Run Configurations -> Select Classpath tab -> Select to the bootstrap Entries -> Select Advanced -> Select Add library -> Select JUnit -> Next -> حدد JUnit4 من القائمة المنسدلة -> إنهاء

ثم حدد تطبيق -> تشغيل


عند الاستخدام في Maven ، قم بتحديث المعدات الثانوية ، مثل: junit from eg 4.8.2 to 4.11.


كان لدي نفس المشكلة ، كانت المشكلة فيContextConfiguration في فصول اختبار لي ، كنت أقوم بتحميل سياق servlet أيضاً ، فقط أتغير:

@ContextConfiguration(locations = { "classpath*:**\*-context.xml", "classpath*:**\*-config.xml" })

إلى:

@ContextConfiguration(locations = { "classpath:**\*-context.xml", "classpath:**\*-config.xml" })

وهذا كل شيء. بهذه الطريقة ايم فقط تحميل جميع الملفات مع نمط * -context.xml في مسار اختبار لي.


يأتي هذا الخطأ أيضًا في حالة وجود نسختين من مكتبة hamcrest أو hamcrest-core في مسار الصنف.

في ملف pom ، يمكنك استبعاد الإصدار الإضافي ويعمل.


يمكن أن تحدث نفس المشكلة إذا قمت بتنزيل JUnit jar من موقع JUnit ، ولكن نسيت تحميل جرة Hamcrest - كلاهما مطلوبان (تقول التعليمات لتنزيلهما معاً ، لكني تخطيت إلى الأمام! Oops)





noclassdeffounderror