JUnit 테스트를 실행할 때 클래스를 찾을 수 없음 예외


117

Eclipse에서 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)

JUnitmaven을 사용하고 있지만 클래스 경로에 라이브러리를 추가하려고 시도 했으며 JUnit 라이브러리는 POM 종속성에 있습니다.

이미 프로젝트 정리를 시도하고 Eclipse 용 JUnit 플러그인을 사용하여 새 JUnit 테스트 케이스를 만들었지 만 여전히 동일한 오류가 발생합니다.


10
실행 시도 mvn clean test가 모든 테스트 클래스를 컴파일하면
Jigar 조시에게

1
com.myproject.server.MyTest가 bin 폴더에 있는지 확인해 주시겠습니까? 컴파일 또는 빌드 경로 오류로 인해 컴파일되지 않으면이 오류가 발생합니다.
vikas 2012-07-08

한 클래스 또는 전체 프로젝트를 테스트하고 있습니까?
Doszi89


1
필자의 경우 Maven을 사용하여 테스트를 실행했지만 테스트 클래스를 마우스 오른쪽 버튼으로 클릭하고 Run As-> JUnit Test를 선택하면 ClassNotFoundException이보고되었습니다. 나는이 프로젝트에 마우스 오른쪽 버튼을 클릭하여 고정하고 속성으로 이동 -> 빌더 다음 자바 빌더 위에 메이븐 프로젝트 빌더를 이동
xorcus

답변:


120

이것은 사용할 때 소스 코드 만 컴파일되기 때문에 발생하는 것으로 보입니다 mvn clean compile(maven 3.1.0을 사용하고 있으므로 항상 이와 같이 작동하는지 확실하지 않습니다).

를 실행 mvn test하면 테스트 코드도 컴파일되지만 테스트를 실행합니다 (Eclipse를 통해 실행하려는 경우 즉시 바람직하지 않을 수 있음).이 문제를 해결하는 방법은 test-compile언제든지 Maven 명령 시퀀스에 추가 하는 것입니다. 당신은 mvn clean. 예를 들어 mvn clean compile test-compile.


1
나는 이런 일이 한 번 일어 났고 slomek의 대답이 효과가 있었고 같은 오류가 다시 발생했기 때문에 이것을 시도해야했습니다. 이제 다시 정상적으로 작동하므로 안전을 위해이 두 가지를 모두 수행하는 것이 좋습니다.
Roger

감사합니다. 그러나 제 경우에는 닫을 때까지 작동하지 않았고 일식에서 프로젝트를 다시 열었습니다.
Paramesh Korrakuti

간단히 말해서 'mvn clean test-compile'을 한 다음 이클립스에서 Junit 테스트를 실행하십시오. 그것은 나를 위해 일했습니다. 감사.
Sreram

103

내 테스트와 비슷한 문제가 있었고 웹 어딘가에서 프로젝트 속성의 Build Path 로 이동하여 Maven Dependencies를 JRE System Library 위로 이동 해야한다는 것을 발견했습니다 . 그것은 나를 위해 일한 것 같습니다.


1
이것이 내 문제를 해결해 주셔서 감사합니다. 실제 테스트를 실행하려고 할 때 클래스를 찾을 수 없음 오류가 발생했습니다. 추가 mvn 빌드 대상을 추가하기 전에 이것이 아마도 바람직한 첫 번째 단계라고 생각합니다.
Roger

8
이 방법은 게시물의 스크린 샷으로 설명됩니다 (위의 @slomek의 답변에서 단계가 명확하지 않은 경우)
nhylated

2
Eclipse Mars 2에서 JRE System Library 위로 Maven Managed Dependencies를 이동할 수는 없었지만 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Properties-> Builders로 이동 한 다음 Maven Project Builder를 Java Builder 위로 이동하면 저에게 효과적이었습니다.
xorcus

위의 모든 것을 시도했지만 작동하지 않았습니다. 또한 JRE 시스템 라이브러리에 대한 Maven 종속성을 이동할 수 없었지만 라이브러리 탭 아래에있었습니다. 그런 다음 빌드 경로-> 주문 및 내보내기->로 이동하여 Maven 종속성을 JRE 시스템 라이브러리 위로 이동할 수있었습니다. 그런 다음 프로젝트를 빌드하고 Maven 설치를 실행 한 다음 테스트가 성공적으로 실행되었습니다.
Megan

22

나는 같은 문제에 직면했고 @slomek의 대답을 사용하여 해결할 수 있었지만 그 후 문제가 다시 나타났습니다.

마지막으로 프로젝트의 출력 폴더를 JUnit 테스트의 실행 구성에 추가하여 수정했습니다. 단계는 다음과 같습니다.

  • 프로젝트의 출력 폴더 찾기 Project properties -> Java Build Path -> Default output folder
    • 보통 이것은 <project-folder>/bin
  • 이동 Run -> Run Configurations...
  • 단위 테스트의 실행 구성을 클릭하고 Classpath탭을 클릭 하십시오.
  • User Entries프로젝트가 이미 포함 된 경우에도 아래에 프로젝트의 출력 폴더를 명시 적으로 추가합니다.
    • Advanced -> Add folder출력 폴더를 추가하려면를 클릭하십시오.

이 문제는 Eclipse의 이상한 프로젝트 설정 때문일 수 있습니다. 예를 들어 단일 프로젝트 / 폴더로 가져온 중첩 된 Maven 프로젝트가있는 소스 폴더 (적어도 내 프로젝트가 설정되는 방식).


정말 고맙습니다; 나는이 문제가 있었다. 당신의 수정은 나를 위해 일했습니다. 상위 2 개는 그렇지 않았습니다. 찬성.
davtom 2015

정말 훌륭합니다! 이것에 대해 오랫동안 내 머리를 긁적이었습니다. 감사!
RayCh

17

Eclipse에서만이 문제가 발생하는 경우 선택한 프로젝트에서 Project-> Clean ... 명령을 실행하면 도움이 될 수 있습니다.


덕분에 - 사실은 나를 위해 일한 - JAVE EE 일식 gradlew
Abdeali Chandanwala

11

개선없이 여기에서 모든 것을 시도한 후 Eclipse를 다시 시작하여 문제를 해결했습니다.


5

maven 업데이트를 실행하여 문제를 해결했습니다. 프로젝트 프로젝트> Maven> 프로젝트 업데이트를 마우스 오른쪽 단추로 클릭하십시오.


3

제 경우에는 maven 디렉토리 구조가 잘못되었습니다.

다음과 같아야합니다.

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

내가 그것을 고친 후-모든 것이 매력처럼 작동했습니다.


2

제 경우에는 다음 단계 만이 문제를 해결하는 데 도움이되었습니다.

  1. 프로젝트-> 속성-> 실행 / 디버그 설정.
  2. " '.....'에 대한 시작 구성"에서 클래스 / 프로젝트를 선택하십시오.
  3. 편집-> 클래스 경로-> "기본 항목 복원"

감사!! 이 사람이 나를 도왔다 !!
sumandas

1

이전에는이 ​​경우 항상 mvn을 수행 eclipse:eclipse하고 Eclipse를 다시 시작했는데 작동했습니다. GIT로 마이그레이션 한 후 다소 이상하게 작동하지 않습니다.

여기서 기본적인 문제는 Mr Eclipse가 컴파일 된 클래스를 찾지 못한다는 것입니다. 그런 다음 출력 폴더를 테스트 mvn clean install를 건너 뛰지 않고 기본적으로 생성되는 Project / target / test-classes로 설정 하고 다음 해결 방법을 진행했습니다.

옵션 1 : 각 테스트 케이스에 대한 클래스 경로 설정

Eclipse-> 실행-> 구성 실행-> JUnit-> mytest 선택-> 클래스 경로 탭-> 사용자 항목 선택-> 고급-> 폴더 추가-> 선택-> 적용-> 실행

옵션 2 : 클래스 경로 변수를 만들고 모든 테스트 케이스에 대한 클래스 경로에 포함

Eclipse-> Windows-> Classpath 변수-> 새로 만들기-> [이름 : Junit_test_cases_cp | path :]-> ok 그런 다음 Eclipse-> Run-> 구성 실행-> JUnit-> mytest 선택-> classpath 탭에서-> 사용자 항목 선택-> 고급-> 클래스 경로 변수 추가-> Junit_test_cases_cp-> ok- > 적용-> 실행

이것은 온라인에서 모든 제안을 시도한 후에 현재 저에게 유일한 일입니다.


1

두 개의 리소스 디렉터리가있는 테스트 SourceSet이있는 Gradle 프로젝트에서 동일한 문제가 발생했습니다.

이 스 니펫은 main-module.gradle에서 가져오고 테스트 SourceSet에 리소스 디렉토리를 추가합니다.

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

이렇게하면 프로젝트 메인 모듈의 테스트 SourceSet과 관련된 두 개의 리소스 디렉토리가 있습니다.

../other-module/src/test/resources src / test / resources (메인 모듈 폴더에 상대적이며 Java 플러그인에 의해 자동으로 추가됨)

두 소스 디렉토리에 같은 이름의 파일이 두 개 있으면 프로세스 리소스 단계의 문제가 발생했습니다. 결과적으로 컴파일이 시작되지 않았고 이러한 이유로 JUnit이 클래스를 찾고있는 bin 디렉토리에 .class가 복사되지 않았습니다. ClassNotFoundException은 두 파일 중 하나의 이름을 바꾸는 것만으로 사라졌습니다.


1

NoClassDefFoundError는 실제로 클래스를 초기화 할 수 없음을 의미합니다. 수업을 찾는 것과는 아무 관련없습니다 . null String에서 trim ()을 호출 할 때이 오류가 발생했습니다.

JUnit은 NullPointerException을 표시하지 않습니다. 테스트에 사용할 수없는 속성 파일에서 문자열을 가져 오기 때문에 정상적으로 실행할 때 문자열이 null이 아닙니다.

내 조언은 테스트가 통과하기 시작할 때까지 수업에서 조각을 제거하는 것입니다. 그런 다음 오류를 제공하는 줄을 확인할 수 있습니다.


0

Junits를 디버깅하는 Eclipse Helios와 비슷한 문제가 발생했습니다. 내 문제는 Junits를 성공적으로 실행할 수 있었지만 동일한 JUNIT를 디버깅하는 동안 ClassNotFoundException이 발생했을 때 약간 달랐습니다.

Stackoverflow.com 및 다른 곳에서 포럼에서 사용할 수있는 모든 종류의 다른 솔루션을 시도했지만 아무것도 작동하지 않는 것 같습니다. 거의 이틀 동안이 문제로 머리를 두드린 후 마침내 해결책을 찾았습니다.

솔루션이 작동하지 않는 것 같으면 작업 영역에 생성 된 .metadata 폴더를 삭제하면됩니다. 이렇게하면 프로젝트 및 모든 종류의 구성을 가져 오는 추가 오버 헤드가 발생하지만 이러한 문제는 확실히 해결 될 것입니다.

이것이 도움이되기를 바랍니다.


참고로 ... 이렇게하려면 환경을 다시 구축해야합니다. 그래서 해결책은 그냥 ... 당신이 할에 대해 무엇을 알고 할 수 있지만

0

이 단계는 저에게 효과적이었습니다.

  • 로컬 Maven 저장소의 콘텐츠를 삭제합니다.
  • 명령 줄에서 mvn clean install 을 실행 하십시오. (pom 디렉토리에 대한 cd).
  • Eclipse에서 프로젝트를 빌드하십시오.

0

1- mvn 이클립스 : 이클립스

2- 모든 프로젝트 정리

3- 다시 시작


0

eGit을 사용하고 있으며 Clover와 같은 테스트 커버리지 도구로 인해 클래스 경로가 업데이트되는 경우 때때로 내용을 완전히 삭제하지 않는 정리 딸꾹질이 있다는 또 다른 답변으로 언급 할 가치가 있습니다. /path/to/git/repository/<project name>/bin/

본질적으로 Eclipse의 오류 로그보기를 사용하여이 정리 작업 중에 문제를 일으키는 원인을 식별하고 소스 디렉토리로 이동 한 다음 수동으로 <project name>/bin디렉토리를 삭제했습니다 . 완료되면 Eclipse로 돌아가서 F5프로젝트를 새로 고쳤으며 ( ) 오류가 사라졌습니다.


0

프로젝트가 일반 Java 프로젝트가 아닌 Maven 프로젝트로 열려 있는지 확인하십시오. 사실 생각할 필요는 없지만 그것이 당신이 그것을 놓칠 수있는 정확히 같은 이유입니다.


0

또한 "[ERROR]이 환경에 제공된 컴파일러가 없습니다. JDK가 아닌 JRE에서 실행 중입니까?"때문일 수도 있습니다.


0

나는 같은 문제에 직면했다. 외부에서 인터넷에서 다운로드하여 추가 한 외부 JUnit jar 종속성을 제거하여 문제를 해결했습니다. 하지만 프로젝트-> 속성-> 빌드 경로-> 라이브러리 추가-> junit-> 버전 (ex junit4)-> 적용을 선택했습니다.

종속성을 자동으로 추가했습니다. 그것은 내 문제를 해결했습니다.


0

더미 변경을하고 테스트 클래스를 저장하면 문제를 해결할 수 있습니다. .class가 자동으로 빌드됩니다.


0

컴파일 문제인 것 같습니다. 프로젝트를 Maven 테스트로 실행 한 다음 JUnit 테스트로 실행합니다.



0

Pls는 junit4를 종속성으로 추가했는지 확인합니다.

예 :

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

-5

Main 클래스Test Case 클래스 를 / src / test / java 에 두는 것을 잊었을 수 있습니다 . 한 번 확인하십시오.


1
java.lang.ClassNotFoundException은 클래스가 이미 컴파일되었지만 클래스 경로가 제대로 설정되지 않아 런타임에 발생합니다.
Nitin Mahesh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.