Pengecualian Kelas Tidak Ditemukan saat menjalankan uji JUnit

117

Saya mendapatkan kesalahan ini saat menjalankan tes JUnit di Eclipse:

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)

Saya sudah mencoba menambahkan JUnitpustaka di classpath meskipun saya menggunakan maven, dan pustaka JUnit ada dalam dependensi POM.

Saya sudah mencoba membersihkan proyek dan membuat kasus uji JUnit baru menggunakan plugin JUnit untuk Eclipse, masih mendapatkan kesalahan yang sama.

quark
sumber
10
coba jalankan mvn clean testsetelah itu akan mengkompilasi semua kelas pengujian
Jigar Joshi
1
Bisakah Anda memeriksa apakah com.myproject.server.MyTest ada di folder bin? Maksud saya, jika tidak dikompilasi karena kesalahan jalur kompilasi atau build, Anda akan mendapatkan error ini.
Vikas
apakah Anda menguji satu kelas atau keseluruhan proyek?
Doszi89
Kemungkinan duplikat Eclipse - java.lang.ClassNotFoundException
Amos M. Carpenter
1
Dalam kasus saya, menjalankan pengujian menggunakan Maven berhasil, tetapi jika saya mengklik kanan pada kelas pengujian dan memilih Run As -> JUnit Test, ClassNotFoundException dilaporkan. Saya memperbaikinya dengan mengklik kanan pada proyek dan pergi ke Properties -> Builders dan kemudian memindahkan Maven Project Builder di atas Java Builder
xorcus

Jawaban:

121

Ini tampaknya terjadi karena hanya kode sumber yang dikompilasi saat Anda menggunakan mvn clean compile (saya menggunakan maven 3.1.0 jadi saya tidak yakin apakah selalu berperilaku seperti ini).

Jika Anda menjalankan mvn test, kode pengujian juga akan dikompilasi, tetapi kemudian menjalankan pengujian (yang mungkin tidak langsung diinginkan jika Anda mencoba menjalankannya melalui Eclipse.) Cara mengatasinya adalah dengan menambahkan test-compileurutan perintah Maven Anda setiap kali Anda melakukan a mvn clean. Misalnya, Anda akan lari mvn clean compile test-compile.

Newtrino
sumber
1
Saya mengalami ini sekali dan jawaban slomek berhasil dan kemudian kesalahan yang sama ini terjadi lagi jadi saya harus mencoba ini juga. Ini berfungsi dengan baik lagi sekarang, jadi untuk amannya Anda mungkin ingin melakukan kedua hal ini.
Roger
Terima kasih, ini berhasil untuk saya. Tetapi dalam kasus saya, itu tidak berfungsi sampai ditutup dan proyek dibuka kembali dalam gerhana.
Paramesh Korrakuti
Dengan kata sederhana, lakukan 'mvn clean test-compile' dan kemudian jalankan pengujian Junit Anda di eclipse. Itu berhasil untuk saya. Terima kasih.
Sreram
103

Saya memiliki masalah serupa dengan pengujian saya dan menemukan suatu tempat di Web, bahwa Anda harus pergi ke Build Path di properti proyek Anda dan memindahkan Dependensi Maven di atas JRE System Library . Sepertinya itu berhasil untuk saya.

slomek
sumber
1
Terima kasih ini memecahkan masalah saya. Tes sebenarnya adalah mendapatkan kelas tidak ditemukan kesalahan ketika saya mencoba menjalankannya. Saya pikir ini mungkin langkah pertama yang lebih disukai sebelum menambahkan target membangun mvn ekstra.
Roger
8
Metode ini dijelaskan dengan tangkapan layar di posting ini (jika langkah-langkahnya tidak jelas dari jawaban @ slomek di atas)
dihiasi
2
Saya tidak dapat memindahkan Maven Managed Dependencies di atas JRE System Library di Eclipse Mars 2, tetapi saya dapat mengklik kanan pada proyek tersebut dan pergi ke Properties -> Builders dan kemudian pindahkan Maven Project Builder di atas Java Builder dan itu berhasil untuk saya.
xorcus
Saya mencoba semua hal di atas dan tidak berhasil, saya juga tidak dapat memindahkan Dependensi Maven tentang JRE System Library tetapi itu ada di bawah tab Libraries. Kemudian saya pergi ke Build Path -> Order & Export -> karena dapat memindahkan Dependensi Maven di atas pustaka Sistem JRE. Kemudian saya membangun proyek dan menjalankan penginstalan Maven, lalu pengujian berjalan dengan sukses.
Megan
22

Saya menghadapi masalah yang sama dan saya dapat memperbaikinya menggunakan jawaban @ slomek tetapi masalah tersebut muncul kembali setelah itu.

Saya akhirnya memperbaikinya dengan menambahkan folder output proyek saya ke konfigurasi run pengujian JUnit. Langkah-langkahnya adalah:

  • Temukan folder keluaran proyek Anda dari Project properties -> Java Build Path -> Default output folder
    • Biasanya begini <project-folder>/bin
  • Pergi ke Run -> Run Configurations...
  • Klik pada konfigurasi run unit test dan klik pada Classpath tab
  • Tambahkan folder output proyek Anda secara eksplisit User Entries- meskipun proyek sudah disertakan di sana
    • Klik Advanced -> Add folderuntuk menambahkan folder keluaran

Masalah ini mungkin disebabkan oleh pengaturan proyek yang aneh di Eclipse - misalnya folder sumber dengan proyek maven bersarang yang diimpor sebagai satu proyek / folder (setidaknya begitulah proyek saya disiapkan).

nhylated
sumber
Terima kasih banyak; Saya punya masalah ini. Perbaikan Anda berhasil untuk saya; dua teratas tidak. Dipilih.
davtom
Benar-benar brilian! Sudah lama menggaruk kepalaku karena ini. Terima kasih!
RayCh
17

Jika masalah ini hanya terjadi di Eclipse, menjalankan perintah Proyek -> Bersihkan ... pada proyek yang dipilih dapat membantu.

johanwannheden
sumber
Terima kasih - ini benar-benar berhasil untuk saya - JAVE EE eclipse gradlew
Abdeali Chandanwala
11

Setelah mencoba semuanya di sini tanpa perbaikan, saya menyelesaikan masalah saya hanya dengan memulai ulang Eclipse

Berit Larsen
sumber
5

Saya memperbaiki masalah saya dengan menjalankan pembaruan maven. Klik kanan proyek proyek Anda> Maven> Perbarui Proyek

Azian
sumber
3

Dalam kasus saya, saya memiliki struktur direktori maven yang salah.

Yang seharusnya seperti:

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

Setelah saya memperbaikinya - semuanya bekerja seperti pesona.

ITisha
sumber
2

Dalam kasus saya, hanya langkah selanjutnya yang membantu saya menyelesaikan masalah ini:

  1. Proyek-> properti-> Pengaturan Run / Debug.
  2. Dalam "Luncurkan konfigurasi untuk '.....'" pilih kelas / proyek
  3. Edit -> Jalur Kelas -> "Kembalikan Entri Default"
Roman Romaniuk
sumber
Terima kasih!! Hanya yang ini yang membantuku !!
sumandas
1

Sebelumnya, dalam hal ini, saya selalu melakukan mvn eclipse:eclipse dan memulai ulang Eclipse saya dan berhasil. Setelah bermigrasi ke GIT, GIT berhenti bekerja untuk saya yang agak aneh.

Masalah dasar di sini adalah Mr Eclipse tidak menemukan kelas yang dikompilasi. Kemudian, saya menetapkan folder output sebagai Project / target / test-class yang secara default dihasilkan olehmvn clean install tanpa melewatkan pengujian dan melanjutkan dengan solusi berikut:

Opsi 1: Setel jalur kelas untuk setiap kasus pengujian

Eclipse -> Run -> Run Configurations -> di bawah JUnit-> pilih mytest -> di bawah tab classpath-> Pilih User Entries-> Advanced-> Add Folder -> Select -> Apply-> Run

Opsi 2: Buat variabel classpath dan sertakan di classpath untuk semua kasus pengujian

Eclipse -> Windows -> Variabel Jalur Kelas -> Baru -> [Nama: Junit_test_cases_cp | path:] -> ok Lalu pergi ke Eclipse-> Run -> Run Configurations -> JUnit-> pilih mytest -> di bawah tab classpath -> Pilih User Entries-> Advanced-> Tambahkan variabel classpath-> Pilih Junit_test_cases_cp-> ok- > Terapkan-> Jalankan

Ini adalah satu-satunya hal yang saat ini berhasil untuk saya setelah mencoba semua saran secara online.

pengguna3222211
sumber
1

Saya memiliki masalah yang sama dengan proyek Gradle dengan pengujian SourceSet dengan dua direktori sumber daya.

Cuplikan ini berasal dari main-module.gradle dan menambahkan direktori sumber daya ke SourceSet pengujian:

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

Melakukan ini, saya memiliki dua direktori sumber daya yang terkait dengan tes SourceSet dari modul utama proyek:

../other-module/src/test/resources src / test / resources (relatif terhadap folder main-module, otomatis ditambahkan oleh plugin java)

Saya menemukan bahwa jika saya memiliki dua file dengan nama yang sama di kedua direktori sumber, ada yang tidak beres pada tahap sumber daya proses. Akibatnya, tidak ada kompilasi yang dimulai dan karena alasan ini tidak ada .class yang disalin di direktori bin, tempat JUnit mencari class tersebut. ClassNotFoundException menghilang hanya dengan mengganti nama salah satu dari dua file.

David Obber
sumber
1

NoClassDefFoundError benar-benar berarti tidak dapat menginisiasi kelas. Ini tidak ada hubungannya dengan menemukan kelas. Saya mendapat kesalahan ini saat memanggil trim () pada String null.

JUnit tidak akan menampilkan NullPointerException. String tersebut tidak null saat berjalan normal karena saya mengambil string dari file properti yang tidak tersedia untuk pengujian.

Saran saya adalah untuk menghapus bagian dari kelas sampai tes Anda mulai lulus. Kemudian Anda dapat menentukan baris mana yang memberikan kesalahan.

Philip Rego
sumber
0

Saya memiliki masalah yang sama dengan Eclipse Helios saya yang men-debug Junits. Masalah saya sedikit berbeda karena saya berhasil menjalankan Junits tetapi ketika saya mendapatkan ClassNotFoundException saat men-debug JUNIT yang sama.

Saya telah mencoba semua jenis solusi berbeda yang tersedia di Stackoverflow.com dan forum di tempat lain, tetapi tidak ada yang berhasil. Setelah membenturkan kepala saya dengan masalah ini selama hampir dua hari, akhirnya saya menemukan solusi untuk itu.

Jika tidak ada solusi yang berhasil, hapus saja folder .metadata yang dibuat di ruang kerja Anda. Ini akan menciptakan biaya tambahan untuk mengimpor proyek dan semua jenis konfigurasi yang telah Anda lakukan, tetapi ini pasti akan menyelesaikan masalah ini.

Semoga ini membantu.

Nayan
sumber
Sebagai catatan ... melakukan ini akan mengharuskan Anda membangun kembali lingkungan Anda. Jadi sementara itu bisa menjadi solusi, cukup perhatikan apa yang akan Anda lakukan ...
Bob
0

Langkah-langkah ini berhasil untuk saya.

  • Hapus konten repositori Maven lokal.
  • jalankan mvn clean install di baris perintah. (cd ke direktori pom).
  • Bangun Proyek di Eclipse.
Jake Graham Arnold
sumber
0

Gerhana 1- mvn: gerhana

2 - proyek bersihkan semua proyek

3- restart

Toumi
sumber
0

Layak disebutkan sebagai jawaban lain bahwa jika Anda menggunakan eGit, dan jalur kelas Anda diperbarui karena katakanlah, alat cakupan pengujian seperti Clover, bahwa terkadang ada cegukan pembersihan yang tidak sepenuhnya menghapus konten /path/to/git/repository/<project name>/bin/

Pada dasarnya, saya menggunakan Tampilan Log Kesalahan Eclipse, mengidentifikasi apa yang menyebabkan masalah selama upaya pembersihan ini, menavigasi ke direktori sumber, dan menghapus <project name>/bindirektori secara manual . Setelah itu selesai saya kembali ke Eclipse dan menyegarkan ( F5) proyek saya dan kesalahan itu hilang.

Blake Neal
sumber
0

Periksa apakah proyek Anda dibuka sebagai proyek Maven dan bukan hanya proyek Java biasa. Sebenarnya no-brainer, tapi itulah alasan yang persis sama mengapa Anda mungkin melewatkannya.

Ben
sumber
0

Bisa juga karena "[ERROR] Tidak ada kompiler yang disediakan di lingkungan ini. Mungkin Anda menjalankan JRE daripada JDK?"

William
sumber
0

Saya pernah menghadapi masalah yang sama. Saya menyelesaikannya dengan menghapus ketergantungan jar JUnit eksternal yang saya tambahkan dengan mengunduh dari internet secara eksternal. Tapi kemudian saya pergi ke project-> properties-> build path-> add library-> junit-> memilih versinya (ex junit4) -> apply.

Ini secara otomatis menambahkan ketergantungan. itu memecahkan masalah saya.

Agniva Dutta
sumber
0

Membuat beberapa perubahan palsu dan menyimpan kelas pengujian dapat menyelesaikan masalah. Ini akan membangun .class secara otomatis

Lorenzo Lerate
sumber
0

Sepertinya masalah kompilasi. Jalankan proyek sebagai pengujian Maven, lalu Jalankan sebagai Uji JUnit.

Yao Li
sumber
0

Tolong periksa apakah Anda telah menambahkan junit4 sebagai dependensi.

misalnya

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>
Ishan Liyanage
sumber
-5

Mungkin Anda lupa menempatkan kelas Utama dan kelas Kasus Uji di / src / test / java. Periksa Sekali.

Sathya
sumber
1
java.lang.ClassNotFoundException muncul ketika kelas telah dikompilasi tetapi dalam waktu berjalan karena classpath tidak disetel dengan benar.
Nitin Mahesh