JUnit testi çalıştırılırken Sınıf Bulunamadı İstisnası


117

Eclipse'de JUnit testini çalıştırırken bu hatayı alıyorum:

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)

JUnitMaven kullanmama rağmen sınıf yolunda kitaplık eklemeyi denedim ve JUnit kitaplığı POM bağımlılığında.

Zaten projeyi temizlemeyi denedim ve Eclipse için JUnit eklentisini kullanarak yeni bir JUnit test vakası oluşturdum, yine de aynı hatayı alıyorum.


10
bir mvn clean testkez çalıştırmayı deneyin , tüm test sınıflarını derleyecek
Jigar Joshi

1
Com.myproject.server.MyTest'in bin klasöründe olup olmadığını kontrol edebilir misiniz? Demek istediğim, derleme veya yol oluşturma hatası nedeniyle derlenmemişse bu hatayı alırsınız.
vikas

Bir sınıfı mı yoksa tüm projeyi mi test ediyorsunuz?
Doszi89


1
Benim durumumda Maven kullanarak test çalıştırma işe yaradı, ancak bir test sınıfına sağ tıklayıp Farklı Çalıştır -> JUnit Test'i seçersem ClassNotFoundException bildirdi. Projeye sağ tıklayıp Özellikler -> Oluşturucular'a giderek ve ardından Maven Project Builder'ı Java Builder'ın üzerine taşıyarak
düzelttim

Yanıtlar:


121

Bu, kullandığınızda yalnızca kaynak kodun derlenmesinden kaynaklanıyor gibi görünüyor mvn clean compile(maven 3.1.0 kullanıyorum, bu yüzden her zaman böyle davrandığından emin değilim).

Eğer kaçarsan mvn test, test kod yanı derlemek, ancak o zaman testler düzenler (eğer Eclipse ile çalıştırın çalışıyorsanız hemen arzu olmayabilir.) Bu çevrede yolu eklemektir test-compilesizin Maven komut dizisi ne zaman için bir mvn clean. Örneğin, koşarsınız mvn clean compile test-compile.


1
Bunu bir kez yaşadım ve slomek'in cevabı işe yaradı ve sonra aynı hata tekrar oldu, bu yüzden bunu da denemek zorunda kaldım. Şimdi yine iyi çalışıyor, bu yüzden güvende olmak için bunların her ikisini de yapmak isteyebilirsiniz.
Roger

Teşekkürler, benim için çalıştı. Ama benim durumumda, kapanana kadar çalışmadı ve tutulma döneminde proje yeniden açıldı.
Paramesh Korrakuti

Basit bir deyişle, bir 'mvn clean test derlemesi' yapın ve ardından Junit testlerinizi tutulmada çalıştırın. Benim için çalıştı. Teşekkürler.
Sreram

103

Testlerimde benzer bir sorun yaşadım ve Web'de bir yerde , projenizin özelliklerinde Yol Oluştur'a gitmeniz ve Maven Bağımlılıklarını JRE Sistem Kitaplığı'nın üzerine taşımanız gerektiğini öğrendim . Bu benim için işe yaradı gibi görünüyor.


1
Teşekkürler, bu sorunumu çözdü. Gerçek test, çalıştırmayı denediğimde sınıfın bulunamadı hatası alıyordu. Bunun, ekstra mvn oluşturma hedefleri eklemeden önce muhtemelen tercih edilen bir ilk adım olduğunu düşünüyorum.
Roger

8
Bu yöntem, bu gönderideki ekran görüntüleriyle açıklanmıştır (adımların @ slomek'in yukarıdaki cevabından net olmaması durumunda)
2014

2
Maven Yönetilen Bağımlılıkları Eclipse Mars 2'de JRE Sistem Kitaplığı'nın üzerine taşıyamadım, ancak projeye sağ tıklayıp Özellikler -> Oluşturucular'a gidebilir ve ardından Maven Proje Oluşturucu'yu Java Builder'ın üzerine taşıyabilir ve benim için çalıştı.
xorcus

Yukarıdakilerin hepsini denedim ve işe yaramadı, JRE Sistem Kitaplığı ile ilgili Maven Bağımlılıklarını da taşıyamadım ama bu Kitaplıklar sekmesinin altındaydı. Daha sonra Maven Bağımlılıklarını JRE Sistem kitaplığının üzerine taşıyabildiğim için Yol Oluştur -> Sırala ve Dışa Aktar -> seçeneğine gittim. Sonra projeyi oluşturdum ve bir Maven kurulumu yaptım, ardından test başarıyla çalıştı.
Megan

22

Aynı problemle karşılaştım ve @ slomek'in cevabını kullanarak düzeltmeyi başardım ama bundan sonra sorun yeniden ortaya çıktı.

Sonunda projemin çıktı klasörünü JUnit testinin çalıştırma yapılandırmasına ekleyerek düzelttim. Adımlar:

  • Projenizin çıktı klasörünü şuradan bulun: Project properties -> Java Build Path -> Default output folder
    • Genellikle bu <project-folder>/bin
  • Git Run -> Run Configurations...
  • Birim testinin çalıştırma yapılandırmasına tıklayın ve Classpathsekmeye tıklayın
  • Projenizin çıktı klasörünü altına açıkça ekleyin User Entries- proje zaten oraya dahil edilmiş olsa bile
    • Advanced -> Add folderÇıktı klasörünü eklemek için tıklayın

Bu sorun, Eclipse'deki garip proje kurulumundan kaynaklanıyor olabilir - örneğin, tek bir proje / klasör olarak içe aktarılan iç içe geçmiş maven projelerinin bulunduğu kaynak klasör (en azından projem böyle ayarlandı).


Çok teşekkür ederim; Bu sorunu yaşadım. Düzeltmeniz benim için çalıştı; ilk ikisi yapmadı. Yukarı-oy kullandı.
davtom

Kesinlikle harika! Bunun üzerine yıllardır kafamı kaşıyordum. Teşekkürler!
RayCh

17

Bu sorun yalnızca Eclipse'de ortaya çıkıyorsa, seçilen projede Proje -> Temizle ... komutunun çalıştırılması yardımcı olabilir.


Teşekkürler - aslında benim için çalıştı - JAVE EE eclipse gradlew
Abdeali Chandanwala

11

Buradaki her şeyi iyileştirmeden denedikten sonra, Eclipse'i yeniden başlatarak sorunumu çözdüm.


5

Sorunumu maven güncellemesini çalıştırarak çözdüm. Projenizi projelendirmek için sağ tıklayın> Maven> Projeyi Güncelle


3

Benim durumumda yanlış bir maven dizin yapısına sahiptim.

Hangisi şöyle olmalı:

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

Bunu düzelttikten sonra - her şey bir cazibe gibi çalıştı.


2

Benim durumumda, yalnızca sonraki adımlar bu sorunu çözmeme yardımcı oldu:

  1. Proje-> özellikler-> Çalıştır / Hata Ayıklama Ayarları.
  2. "'.....' için yapılandırmaları başlat" bölümünde sınıfları / projeleri seçin
  3. Düzenle -> Sınıfyolu -> "Varsayılan Girişleri Geri Yükle"

Teşekkürler!! Sadece bu bana yardım etti !!
sumandas

1

Daha önce, bu durumda, her zaman mvn yaptım eclipse:eclipseve Eclipse'imi yeniden başlattım ve işe yaradı. GIT'e geçtikten sonra benim için çalışmayı bıraktı ki bu biraz garip.

Buradaki temel sorun, Bay Eclipse'in derlenen sınıfı bulamamasıdır. Ardından, çıktı klasörünü varsayılan olarak mvn clean installtesti atlamadan oluşturulan Proje / hedef / test sınıfları olarak ayarladım ve aşağıdaki geçici çözüme devam ettim :

Seçenek 1: Her test senaryosu için sınıf yolunu ayarlayın

Eclipse -> Çalıştır -> Yapılandırmaları Çalıştır -> JUnit altında -> testimi seçin -> sınıf yolu sekmesi altında -> Kullanıcı Girişlerini Seç -> Gelişmiş-> Klasör Ekle -> Seç -> Uygula-> Çalıştır

Seçenek 2: Sınıf yolu değişkeni oluşturun ve bunu tüm test senaryoları için sınıf yoluna dahil edin

Eclipse -> Windows -> Sınıf Yolu Değişkenleri -> Yeni -> [Ad: Junit_test_cases_cp | yol:] -> ok Sonra Eclipse-> Çalıştır -> Yapılandırmaları Çalıştır -> JUnit-> sınıf yolu sekmesi altında testim -> Kullanıcı Girişlerini Seç -> Gelişmiş-> Sınıf yolu değişkenleri ekle-> Junit_test_cases_cp-> ok- seçeneğine gidin > koymasıdır> Çalıştır

Tüm önerileri çevrimiçi denedikten sonra şu anda benim için çalışan tek şey bu.


1

İki kaynak dizini olan bir SourceSet testiyle Gradle projesinde aynı sorunu yaşadım.

Bu kod parçası, main-module.gradle'dan gelir ve test SourceSet'e bir kaynak dizini ekler:

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

Bunu yaparken, ana modülün test SourceSet'iyle ilgili iki kaynak dizinim vardı:

../other-module/src/test/resources src / test / resources (ana modül klasörüne göre, java eklentisi tarafından otomatik olarak eklenir)

Her iki kaynak dizinde de aynı ada sahip iki dosyam varsa, işlem kaynakları aşamasında bir şeylerin ters gittiğini öğrendim. Sonuç olarak, hiçbir derleme başlamadı ve bu nedenle JUnit'in sınıfları aradığı bin dizinine .class kopyalanmadı. ClassNotFoundException, iki dosyadan birini yeniden adlandırırken kayboldu.


1

NoClassDefFoundError gerçekten sınıfı başlatamayacağı anlamına gelir. It has bir şey sınıfını bulmakta ile ilgisi yok. Boş bir String üzerinde trim () çağırırken bu hatayı aldım.

JUnit, NullPointerException göstermez. Dize normal olarak çalışırken boş değil çünkü dizeyi testler için uygun olmayan bir özellikler dosyasından alıyorum.

Benim tavsiyem, testleriniz geçene kadar sınıftan parçalar çıkarmanızdır. Ardından hangi satırın hata verdiğini belirleyebilirsiniz.


0

Eclipse Helios'umda Junits'te hata ayıklayan benzer bir sorun yaşadım. Junits'i başarılı bir şekilde çalıştırabildiğim için sorunum biraz farklıydı, ancak aynı JUNIT'lerde hata ayıklarken ClassNotFoundException alırken.

Stackoverflow.com'da ve başka yerlerde forumlarda bulunan her türlü farklı çözümü denedim, ancak hiçbir şey işe yaramıyor gibi görünüyor. İki güne yakın bir süre bu sorunla kafamı çarptıktan sonra, nihayet çözümünü buldum.

Çözümlerden hiçbiri işe yaramıyorsa, çalışma alanınızda oluşturulan .metadata klasörünü silin. Bu, projeleri ve yaptığınız her türlü yapılandırmayı içe aktarmak için ek bir ek yük oluşturacaktır, ancak bunlar kesinlikle bu sorunu çözecektir.

Umarım bunlar yardımcı olur.


Not olarak ... bunu yapmak, ortamınızı yeniden inşa etmenizi gerektirecektir. Çözüm olabilirken ne yapmak üzere olduğunuza dikkat edin ...
Bob

0

Bu adımlar benim için çalıştı.

  • Yerel Maven deposunun içeriğini silin.
  • komut satırında mvn clean install komutunu çalıştırın . (pom dizinine cd).
  • Eclipse'de Proje Oluşturun.

0

1- mvn tutulma: tutulma

2- Proje tüm projeleri temizleyin

3- yeniden başlat


0

EGit kullanıyorsanız ve Clover gibi bir test kapsama aracı nedeniyle sınıf yolunuz güncellendiğinde, bazen içeriğin tamamen silinmeyen bir temizleme hıçkırığının olduğu başka bir cevap olarak bahsetmeye değer. /path/to/git/repository/<project name>/bin/

Esasen, Eclipse'in Hata Günlüğü Görünümünü kullandım, bu temizleme çalışması sırasında neyin sorunlara neden olduğunu belirledim, kaynak dizine gittim ve dizini manuel olarak sildim <project name>/bin. Bu bittiğinde Eclipse'e geri döndüm ve F5projemi yeniledim ( ) ve hata ortadan kalktı.


0

Projenizin sadece normal bir Java projesi olarak değil de bir Maven projesi olarak açılıp açılmadığını kontrol edin. Aslında hiç akıllıca değil, ama bu, onu kaçırmanızın tam olarak aynı nedeni.


0

Bunun nedeni "[HATA] Bu ortamda hiçbir derleyici sağlanmamıştır. Belki bir JDK yerine bir JRE üzerinde çalışıyorsunuzdur?"


0

Ben de aynı sorunla karşılaşmıştım. İnternetten dışarıdan indirerek eklediğim harici JUnit jar bağımlılığını kaldırarak çözdüm. Ama sonra proje-> özellikler-> inşa yolu-> kitaplık ekle-> junit-> sürümünü seçtim (ex junit4) -> uygula.

Bağımlılığı otomatik olarak ekledi. sorunumu çözdü.


0

Bazı kukla değişiklikler yapmak ve test sınıfını kaydetmek sorunu çözebilir. .Class'ı otomatik olarak oluşturacaktır


0

Derleme sorunu gibi görünüyor. Projeyi Maven testi olarak çalıştırın, ardından JUnit Testi olarak çalıştırın.



0

Bağımlılık olarak junit4'ü ekleyip eklemediğinizi kontrol edin.

Örneğin

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

-5

Main class ve Test Case sınıfını / src / test / java içine yerleştirmeyi unutmuş olabilirsiniz . Bir kez kontrol edin.


1
java.lang.ClassNotFoundException, sınıf zaten derlendiğinde, ancak sınıf yolu düzgün ayarlanmadığı için çalışma zamanında gelir.
Nitin Mahesh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.