java.lang.NoClassDefFoundError in junit


82

Tôi gặp lỗi này trong java trong mã kiểm tra junit của mình. Tôi đã tìm kiếm trên mạng và nó nói rằng tôi cần thêm junit.jar trong classpath.

Trong Eclipse, tôi đã thêm nó vào classpath của cửa sổ Thuộc tính dự án nhưng tôi vẫn gặp lỗi khởi tạo. Tôi nên làm gì..?

Đây là toàn bộ dấu vết của lỗi:

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

1
Lớp nào bị thiếu theo lỗi?
BalusC

Câu trả lời:


105
  1. Nhấp chuột phải vào dự án của bạn trong Package Explorer> nhấp vào Thuộc tính
  2. chuyển đến Java Build Path> tab Libraries
  3. nhấp vào nút 'Thêm Thư viện'
  4. chọn JUnit
  5. Bấm tiếp.
  6. chọn trong nút thả xuống JUnit4 hoặc các phiên bản mới khác.
  7. bấm kết thúc.
  8. Vậy thì Ok.

Việc làm này cho biết thêm JUnit trong thư viện nhưng bây giờ nó nói rằng junit.org không thể được giải quyết

5
Chỉ cần kiểm tra kỹ xem bạn có thư viện Hamcrest cũng trên đường dẫn không. Phiên bản hiện tại của JUnit 4 nên được bao gồm đầy đủ, nhưng đôi khi mọi người chia nhỏ các gói.
Berin Loritsch

làm cách nào để tiếp tục nếu tôi đang sử dụng dòng lệnh linux? Tôi thêm cái lọ này vào đâu?
vipin8169

Các bước trên đang hoạt động tốt và nó đang lấy jar từ thư mục plugin eclipse. Nhưng nếu chúng ta thêm tệp jar junit trong đường dẫn xây dựng cấu hình làm jar bên ngoài, nó sẽ hoạt động đúng không? nó không được làm việc cho tôi
Vineeth Bhaskaran

20
  1. Eclipse -> Menu trên cùng -> Run -> Run Configurations
  2. Xóa tất cả các lần xuất hiện trong bài kiểm tra của bạn. Bài kiểm tra của bạn có thể xuất hiện dưới dạng YourTest.Method_1 (). Xóa luôn.
  3. Chạy lại. Để Eclipse xây dựng một cấu hình mới.

Phụ lục: Tại địa phương, tôi đã tạo một "Thư viện Người dùng" và thêm vào các dự án của mình.

hamcrest-core-1.3.jar

junit-4.12.jar


11

Sự cố tương tự có thể xảy ra nếu bạn đã tải xuống jar JUnit từ trang web JUnit, nhưng quên tải xuống jar Hamcrest - cả hai đều được yêu cầu (hướng dẫn cho biết tải xuống cả hai, nhưng tôi đã bỏ qua! Rất tiếc)


10

Khi sử dụng trong Maven, hãy cập nhật tạo tác junit: junit từ ví dụ: 4.8.2 lên 4.11.


1
Điều này đã sửa một NoClassDefFoundError: org/junit... caused by ClassNotFoundException: org.junit.runners.model.InitializationErrorcho tôi. Tôi đã sử dụng Junit 4.8. Chuyển sang 4,11 đã hoạt động.
Alex

6

Trên Eclipse, tôi có thể giải quyết vấn đề trên bằng cách làm theo các bước dưới đây:

Nhấp chuột phải vào tệp thử nghiệm mà bạn muốn chạy, chọn Run As -> Run Configurations -> Chọn tab Classpath -> Chọn vào mục bootstrap -> Chọn Advanced -> Chọn Add library -> Chọn JUnit -> Next -> Chọn JUnit4 từ menu thả xuống -> Kết thúc

Sau đó chọn Áp dụng -> Chạy



2

Các bước này có hiệu quả đối với tôi khi lỗi cho thấy rằng lớp Bộ lọc bị thiếu (như được báo cáo trong câu hỏi được mô phỏng sai này : JUnit: NoClassDefFoundError: org / junit / runner / sports / Filter ):

  1. Đảm bảo chỉ tham chiếu JUnit 4 một lần trong dự án của bạn (Tôi cũng đã loại bỏ bản chất Maven, nhưng tôi không chắc liệu bước này có bất kỳ ảnh hưởng nào trong việc giải quyết vấn đề hay không) .
  2. Nhấp chuột phải vào tệp chứa các bài kiểm tra đơn vị, chọn Thuộc tính và trong cài đặt Chạy / Gỡ lỗi, hãy xóa bất kỳ mục nào khỏi Cấu hình Khởi chạy cho tệp đó. Nhấn Áp dụng và đóng.
  3. Nhấp chuột phải vào dự án chứa các bài kiểm tra đơn vị, chọn Thuộc tính và trong cài đặt Chạy / Gỡ lỗi, xóa bất kỳ mục nào liên quan đến JUnit khỏi Cấu hình Khởi chạy. Nhấn Áp dụng và đóng.
  4. Làm sạch dự án và chạy thử nghiệm.

Cảm ơn những câu trả lời này đã cho tôi gợi ý cho giải pháp này: https://stackoverflow.com/a/34067333/5538923https://stackoverflow.com/a/39987979/5538923 ).


1

Hãy thử các bước dưới đây:

  1. Chuyển đến cấu hình chạy dự án của bạn. Trong tab Classpath, thêm thư viện JUnit.
  2. Thử lại các bước tương tự.

Nó đã làm việc cho tôi.


1

Tôi đã gặp vấn đề tương tự, vấn đề là trong @ContextConfiguration trong các lớp thử nghiệm của tôi, tôi cũng đang tải ngữ cảnh của servlet, tôi chỉ cần thay đổi:

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

đến:

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

và đó là nó. theo cách này, tôi chỉ tải tất cả các tệp có đường dẫn thử nghiệm mẫu * -context.xml trong tôi.


1
  1. Đảm bảo rằng biến Môi trường JUNIT_HOME được đặt thành c: \ JUNIT.
  2. sau đó Trong cấu hình chạy> chọn classpath> thêm các bình bên ngoài junit-4.11.jar

1

Lý do cho điều này là jar "hamcrest-core" không có trong classpath vì nó không đi kèm trực tiếp với hũ junit. Vì vậy, có hai cách để giải quyết điều này:

  1. chọn dự án -> đường dẫn xây dựng -> thêm thư viện và chọn junit (Nó chứa cả junit & hamcrest-core)
  2. tải xuống hamcrest-core từ kho maven và thêm nó vào classpath của bạn.

1

Thêm hai xu của tôi vào các câu trả lời khác.

Kiểm tra xem bạn có vô tình tạo lớp kiểm tra của mình theo src/main/javathay vì bình thường hay không src/test/java. Cái trước là mặc định trong Eclipse khi bạn tạo một lớp thử nghiệm mới vì bất kỳ lý do gì và có thể bị bỏ qua. Nó có thể đơn giản như vậy.


1

Trong trường hợp của tôi, tôi đã thêm các thư viện của mình vào Modulepath thay vì Classpath.

Nó chỉ hoạt động nếu JUnit được thêm chính xác vào Classpath.

nhập mô tả hình ảnh ở đây


0

Lỗi này cũng xảy ra nếu có 2 phiên bản của hamcrest-library hoặc hamcrest-core trong classpath.

Trong tệp pom, bạn có thể loại trừ phiên bản bổ sung và nó hoạt động.


0

ngay cả Junit4.11.jar cũng không có hamcrest-core.jar. Tôi đã thêm rõ ràng trong classpath và sự cố đã được giải quyết.



-1

Nếu bạn có nhiều phiên bản java, nó có thể ảnh hưởng đến chương trình của bạn.

Tôi đề nghị bạn tải xuống JCreator.

Khi bạn thực hiện, hãy nhấp vào cấu hình, tùy chọn và Hồ sơ JDK. Xóa các phiên bản Java cũ khỏi danh sách. Sau đó nhấp vào nút chơi. Chương trình của bạn sẽ xuất hiện.

Nếu không, hãy nhấn ctrl + alt + O rồi nhấn lại nút phát.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.