codememo

자바.java.java유니트에 ClassDefFound 오류 없음

tipmemo 2023. 5. 13. 10:13
반응형

자바.java.java유니트에 ClassDefFound 오류 없음

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. 패키지 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭 > 속성을 클릭합니다.
  2. Java 빌드 경로 > 라이브러리 탭으로 이동
  3. '라이브러리 추가' 버튼 클릭
  4. Junit 선택
  5. 다음을 클릭합니다.
  6. 드롭다운 버튼 Junit4 또는 다른 새 버전을 선택합니다.
  7. 완료를 클릭합니다.
  8. 그럼 오케이.
  1. 이클립스 -> 상단 메뉴 -> 실행 -> 실행 구성
  2. 테스트의 모든 항목을 삭제합니다.테스트가 [테스트]로 나타날 수 있습니다.메서드_1().그것도 삭제합니다.
  3. 다시 실행합니다. 이클립스가 새로운 구성을 만들 수 있도록 합니다.

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

hamcrest-core-1.3.jar

junit-4.12.jar

JUNit 웹 사이트에서 JUNit jar를 다운로드했지만 Hamcrest jar를 다운로드하는 것을 잊어버린 경우에도 동일한 문제가 발생할 수 있습니다(둘 다 다운로드하라는 지침이 있지만, 저는 건너뛰었습니다!).이런)

Maven에서 사용할 때 아티팩트 junit:junit를 4.8.2에서 4.11로 업데이트합니다.

Eclipse에서 저는 다음 단계를 수행하여 위의 문제를 해결할 수 있었습니다.

실행할 테스트 파일을 마우스 오른쪽 버튼으로 클릭하고 다른 이름으로 실행 -> 구성 실행 -> 클래스 경로 탭 선택 -> 부트스트랩 항목으로 선택 -> 고급 -> 라이브러리 추가 선택 -> JUNIT 선택 -> 다음 -> Finish에서 JUNIT4 선택

그런 다음 적용 -> 실행을 선택합니다.

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

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

여기에 이미지 설명 입력

org/hamcrest/SelfDescripting 클래스가 런타임 클래스 경로에 없습니다.

오류가 필터 클래스가 누락된 것으로 나타났을 때 다음 단계를 수행할 수 있었습니다( 잘못된 복제 질문: JUNit: NoClassDefFoundError: org/junit/runner/manipulation/Filter).

  1. 프로젝트에서 JUNIT 4를 한 번만 참조하도록 하십시오(Maven 속성도 제거했지만 이 단계가 문제 해결에 영향을 미치는지는 잘 모르겠습니다).
  2. 장치 테스트가 들어 있는 파일을 마우스 오른쪽 단추로 클릭하고 속성을 선택한 다음 실행/디버그 설정에서 해당 파일의 실행 구성에서 항목을 제거합니다.Apply를 누르고 Close를 누릅니다.
  3. 장치 테스트가 포함된 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택한 다음 실행/디버그 설정에서 실행 구성에서 Junit과 관련된 항목을 제거합니다.Apply를 누르고 Close를 누릅니다.
  4. 프로젝트를 정리하고 테스트를 실행합니다.

솔루션에 대한 힌트를 주신 https://stackoverflow.com/a/34067333/5538923 및 https://stackoverflow.com/a/39987979/5538923) 에 대한 답변에 감사합니다.

다음 단계를 수행합니다.

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

그것은 나에게 효과가 있었다.

저도 같은 문제가 있었습니다. 제 테스트 클래스의 @ContextConfiguration에 문제가 있었습니다. 서블릿 컨텍스트도 로드하고 있었습니다. 그냥 변경했습니다.

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

대상:

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

이상입니다. 이렇게 하면 테스트 경로에 *-message.xml 패턴이 있는 모든 파일만 로드할 수 있습니다.

  1. 환경 변수 JUNIT_HOME이 c:\로 설정되어 있는지 확인합니다.주니트.
  2. 그런 다음 실행 구성 > classpath 선택 > 외부 jar junit-4.11.jar 추가

그 이유는 "햄크레스트-코어" 병이 junit 병과 직접 함께 제공되지 않기 때문에 클래스 경로에 없기 때문입니다.따라서 이 문제를 해결하는 두 가지 방법이 있습니다.

  1. project 선택 -> buildpath -> 라이브러리 추가 및 junit 선택 (junit & hamcrest-core 모두 포함)
  2. maven repo에서 hamcrest-core를 다운로드하여 클래스 경로에 추가합니다.

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

아래에 테스트 클래스를 만들지 않았는지 확인합니다.src/main/java 때와는 src/test/java전자는 어떤 이유로든 새 테스트 클래스를 만들 때 이클립스에서 기본값이며 간과할 수 있습니다.그것은 그렇게 간단할 수 있습니다.

저는 이 비디오 https://www.youtube.com/watch?v=WHPPQGOyy_Y 을 팔로우하고 있었지만 테스트를 실행하지 못했습니다.그 후, 저는 사진의 단계를 이용하여 다운로드 받은 파일을 모두 삭제하고 Junit을 추가했습니다.

여기에 이미지 설명 입력

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

POM 파일에서 추가 버전을 제외하면 작동합니다.

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

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

JCreator를 다운받으세요.

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

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

언급URL : https://stackoverflow.com/questions/4228047/java-lang-noclassdeffounderror-in-junit

반응형