junit의 java.lang.NoClassDefFoundError


82

내 junit 테스트 코드에서 Java 에서이 오류가 발생합니다. 나는 인터넷을 찾아 봤는데 클래스 패스에 junit.jar을 추가해야한다고 말한다.

Eclipse에서 프로젝트 속성 창의 클래스 경로에 추가했지만 여전히 초기화 오류가 발생합니다. 어떡해 ..?

다음은 오류의 전체 추적입니다.

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
오류로 인해 어떤 클래스가 누락 되었습니까?
BalusC 2010

답변:


105
  1. 패키지 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 클릭합니다.
  2. Java Build Path> Libraries 탭으로 이동합니다.
  3. '라이브러리 추가'버튼을 클릭하십시오.
  4. JUnit 선택
  5. 다음을 클릭하십시오.
  6. 드롭 다운 버튼 JUnit4 또는 기타 새 버전을 선택합니다.
  7. 마침을 클릭하십시오.
  8. 그럼 좋아요.

이렇게이 도서관에서의 JUnit을 추가하지만 지금은 junit.org가 해결 될 수 없음을 말한다

5
클래스 경로에도 Hamcrest 라이브러리가 있는지 다시 확인하십시오. JUnit 4의 현재 버전은 완전히 포함되어야하지만 때때로 사람들은 패키지를 분할합니다.
Berin Loritsch 2010

Linux 명령 줄을 사용하는 경우 어떻게 진행합니까? 이 병을 어디에 추가합니까?
vipin8169

위의 단계는 잘 작동하며 이클립스 플러그인 폴더에서 jar를 가져옵니다. 그러나 구성 빌드 경로에 junit jar 파일을 외부 jar로 추가하면 제대로 작동합니까? 나를 위해 작동하지 않는
바이 니스 Bhaskaran

20
  1. Eclipse-> 최상위 메뉴-> 실행-> 구성 실행
  2. 테스트의 모든 항목을 삭제하십시오. 테스트는 YourTest.Method_1 ()로 나타날 수 있습니다. 그것도 삭제하십시오.
  3. 다시 실행하십시오. Eclipse가 새로운 구성을 구축하게하십시오.

부록 : 로컬에서 "사용자 라이브러리"를 만들고 다음이있는 프로젝트에 추가했습니다.

hamcrest-core-1.3.jar

junit-4.12.jar


11

JUnit 웹 사이트에서 JUnit jar를 다운로드했지만 Hamcrest jar를 다운로드하는 것을 잊은 경우에도 동일한 문제가 발생할 수 있습니다. 둘 다 필요합니다 (둘 다 다운로드하라는 지침이 있지만 건너 뛰었습니다! 죄송합니다).


10

Maven에서 사용할 때 artifact junit : junit를 4.8.2에서 4.11로 업데이트하십시오.


1
이것은 나를 위해 NoClassDefFoundError: org/junit... caused by ClassNotFoundException: org.junit.runners.model.InitializationError를 고쳤습니다. Junit 4.8을 사용하고있었습니다. 4.11로 이동했습니다.
Alex

6

Eclipse에서 아래 단계에 따라 위의 문제를 해결할 수있었습니다.

실행할 테스트 파일을 마우스 오른쪽 버튼으로 클릭하고 다음으로 실행-> 구성 실행-> 클래스 경로 탭 선택-> 부트 스트랩 항목 선택-> 고급 선택-> 라이브러리 추가 선택-> JUnit 선택-> 다음-> 드롭 다운-> 마침에서 JUnit4를 선택합니다.

그런 다음 적용-> 실행을 선택 하십시오.



2

이 단계는 오류가 Filter 클래스가 누락 된 것으로 나타 났을 때 저에게 효과적 이었습니다 (이 잘못된 질문 : JUnit : NoClassDefFoundError : org / junit / runner / manipulation / Filter에서보고 됨 ).

  1. 프로젝트에서 JUnit 4를 한 번만 참조했는지 확인하십시오 (Maven 특성도 제거했지만이 단계가 문제 해결에 영향을 미치는지 확실하지 않습니다) .
  2. 단위 테스트가 포함 된 파일 을 마우스 오른쪽 단추로 클릭하고 속성을 선택한 다음 실행 / 디버그 설정에서 해당 파일의 시작 구성에서 모든 항목을 제거합니다. 적용을 누르고 닫습니다.
  3. 프로젝트를 마우스 오른쪽 버튼으로 클릭단위 테스트가 포함 를 속성을 선택한 다음 실행 / 디버그 설정 아래에서 시작 구성에서 JUnit과 관련된 모든 항목을 제거합니다. 적용을 누르고 닫습니다.
  4. 프로젝트를 정리하고 테스트를 실행하십시오.

이 솔루션에 대한 힌트를 제공 한 다음 답변 덕분에 https://stackoverflow.com/a/34067333/5538923https://stackoverflow.com/a/39987979/5538923 ).


1

아래 단계를 시도하십시오.

  1. 프로젝트의 실행 구성으로 이동합니다. 클래스 경로 탭에서 JUnit 라이브러리를 추가하십시오.
  2. 동일한 단계를 재 시도하십시오.

그것은 나를 위해 일했습니다.


1

나는 같은 문제가 있었고, 문제는 내 테스트 클래스의 @ContextConfiguration에 있었고 서블릿 컨텍스트도로드 중이었습니다.

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

에:

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

그리고 그게 다야. 이런 식으로 나는 테스트 경로에서 * -context.xml 패턴을 가진 모든 파일을로드합니다.


1
  1. 환경 변수 JUNIT_HOME이 c : \ JUNIT로 설정되어 있는지 확인하십시오.
  2. 그런 다음 실행 구성에서> 클래스 경로 선택> 외부 jar 추가 junit-4.11.jar

1

그 이유는 "hamcrest-core"jar가 junit jar와 함께 직접 제공되지 않기 때문에 classpath에 없기 때문입니다. 따라서이 문제를 해결하는 방법에는 두 가지가 있습니다.

  1. 프로젝트 선택-> 빌드 경로-> 라이브러리 추가 및 junit 선택 (junit 및 hamcrest-core 모두 포함)
  2. maven repo에서 hamcrest-core를 다운로드하고 이것을 클래스 경로에 추가하십시오.

1

다른 답변에 내 2 센트를 더합니다.

src/main/java평소 대신에 테스트 클래스를 만들지 않았는지 확인하십시오 src/test/java. 전자는 어떤 이유로 든 새 테스트 클래스를 만들 때 Eclipse에서 기본값이며 간과 할 수 있습니다. 그렇게 간단 할 수 있습니다.


1

제 경우에는 Classpath 대신 Modulepath에 라이브러리를 추가했습니다.

JUnit이 Classpath에 올바르게 추가 된 경우에만 작동합니다.

여기에 이미지 설명 입력


0

이 오류는 hamcrest-library 또는 hamcrest-core의 두 버전이 클래스 경로에있는 경우에도 발생합니다.

pom 파일에서 추가 버전을 제외 할 수 있으며 작동합니다.


0

Junit4.11.jar에도 hamcrest-core.jar이 없습니다. 클래스 경로에 명시 적으로 추가했고 문제가 해결되었습니다.



-1

Java 버전이 두 개 이상있는 경우 프로그램을 방해 할 수 있습니다.

JCreator를 다운로드하는 것이 좋습니다.

그런 다음 구성, 옵션 및 JDK 프로파일을 클릭하십시오. 목록에서 이전 버전의 Java를 삭제하십시오. 그런 다음 재생 버튼을 클릭합니다. 프로그램이 나타납니다.

그렇지 않으면 ctrl + alt + O를 누른 다음 재생 버튼을 다시 누릅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.