sourcecode

LauncherFactory의 NoClassDefFoundError로 인해 JUnit 5를 사용하여 이클립스 테스트를 찾을 수 없습니다.

copyscript 2022. 9. 26. 21:55
반응형

LauncherFactory의 NoClassDefFoundError로 인해 JUnit 5를 사용하여 이클립스 테스트를 찾을 수 없습니다.

문제

프로젝트 JUnit 테스트를 실행할 때마다(JUnit 5와 Java 9 및 Eclipse 산소 1.a 사용) 이클립스가 테스트를 찾을 수 없다는 문제가 발생합니다.

설명

실행 구성에서 이클립스는 @Test로 주석이 달린 메서드를 찾을 수 없으며 대신 (모든 메서드)만 표시합니다.다음 사진은 내 설정을 더 잘 보여 줄 것입니다.

https://imgur.com/a/FTe9c

콘솔 출력:

java.lang.NoClassDefFoundError: org/junit/platform/launcher/core/LauncherFactory
    at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:31)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.base/java.lang.Class.newInstance(Unknown Source)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:368)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:363)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:307)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:222)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.launcher.core.LauncherFactory
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
    ... 11 more

내가 지금까지 시도한 것

나는 이미 시도했다.

  • 테스트 폴더를 빌드 경로에서 제거하고 다시 추가합니다.
  • 테스트를 시작하려면 @Test로 주석을 단 메서드 위에 마우스를 놓고 "Run as JUnit Test"를 클릭합니다.
  • 빌드 경로에서 JUnit 제거 후 다시 추가
  • 재개 일식
  • 또, 프로젝트 전체를 머신간에 이동해, 제공된 이클립스 인스톨로 시험해 보았습니다.
  • 테스트 방법의 이름을 변경합니다.
  • @Test 주석을 다시 입력하다

이러한 순서의 일부는 여기서 확인할 수 있지만, 결국 문제는 해소되지 않았습니다.

테스트를 마우스 오른쪽 버튼으로 클릭하고 'Run Configurations(구성 실행)'를 선택한 후 다음과 같이 'Test runner:(테스트 실행자:)' 선택을 'JUnit 4(JUnit 4)'로 변경하여 문제를 해결했습니다.

실행 구성 스크린샷

테스트를 다시 해봤더니 효과가 있었어요.

STS 3.9.1은 STS 3.9.1입니다.할 수 .junit-platform-launcher프로젝트(https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher))를 참조해 주세요.

gradle을 사용한 프로젝트는 다음과 같이 실시했습니다.

dependencies {
    // other stuff here

    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "5.${junit5MinorVersion}"
    testCompile group: 'org.junit.platform', name: 'junit-platform-launcher', version: "1.${junit5MinorVersion}"
}

gradle.properties 파일:

junit5MinorVersion=1.0

IntelliJ IDEA를 사용하다가 이 예외를 발견했을 경우에도 마찬가지라고 생각합니다.

제 경우, 문제는 이클립스 같은 ID가 없는 저 자신입니다.JUnit 4 Test 클래스를 수입했습니다.

따라서 이 항목을 Import하지 마십시오.

import org.junit.Test  // JUnit 4

그러나 다음 항목을 Import합니다.

import org.junit.jupiter.api.Test // JUnit 5

간단한 수정: (JUnit 5 라이브러리 추가)

순서:

  • 프로젝트 우클릭 -> 빌드 경로 -> 빌드 경로 구성
  • 팝업 -> Add Library -> JUnit -> JUnit 5 -> Finish -> Apply (적용)
  • 프로젝트에 추가된 JUnit 5 라이브러리(및 그 항아리)가 표시됩니다.
  • 프로젝트 우클릭 -> 메이븐 -> 프로젝트 갱신 -> OK

이클립스 버그 525948이미 수정되었으며 2018년 3월 21일 출시될 산소 3(4.7.3)에 게시될 예정입니다.

회피책으로 테스트 코드를 다른 프로젝트에 넣고 테스트 대상 프로젝트를 모듈 경로에 추가합니다. 단, 테스트 대상 프로젝트를 추가하지는 마십시오.module-info.java이치노프로젝트, 클래스 및 모듈의 이름을 지정하면 다음과 같습니다.

여기에 이미지 설명 입력

또한 Eclipse Oxium의 Java 9 및 JUnit 5가 작동하는 모습을 보여주는 동영상도 참조하십시오.1a

지금까지의 답변은 이클립스를 사용하지 않는 다른 사람들과 코드를 공유하는 문제를 해결하지 못했다.여기 한 가지 제안이 있습니다.핵심은 이클립스 사건을 해결하기 위해 메이븐 프로파일을 사용하는 것입니다.

은 여러분이 했다고 가정합니다.junit5.version에에넣넣넣넣넣넣

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit5.version>5.1.1</junit5.version>
</properties>

후 then then로profiles츠키다

<profiles>
    <profile>
        <id>eclipse</id>
        <dependencies>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-engine</artifactId>
            </dependency>
            <dependency>
                <groupId>org.junit.platform</groupId>
                <artifactId>junit-platform-launcher</artifactId>
            </dependency>
        </dependencies>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.junit.jupiter</groupId>
                    <artifactId>junit-jupiter-engine</artifactId>
                    <version>${junit5.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.junit.platform</groupId>
                    <artifactId>junit-platform-launcher</artifactId>
                    <version>1.1.1</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </profile>
</profiles>

그런 다음 로컬 Eclipse에서 프로필을 선택하기만 하면 됩니다.하여 [ ]를 선택합니다.Maven > Select Maven Profiles...(또는 + + )를 누른 후 방금 작성한 "프로파일"을 확인합니다.

메이븐 프로파일 선택

이것으로 당신은 끝입니다.예상대로 당신의 이클립스지만 추가 구성 다른 건축 또는 다른 IDE오염시키지 않을 것 Junit 5시험을 실행할 것이다.

JUnit 목성(v.5.5.1)과 이 maven 의존성을 더하는 것은 문제를 해결한다.

<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-launcher</artifactId>
    <version>1.5.1</version>
    <scope>test</scope>
</dependency>

참고로,"아니 시험 junit5 발견"의 또 다른 이유"민간"시험 케이스 선언:(우발적으로 또는 의도적으로) 있다.

// Example of test case that doesn't get included
@Test
private void testSomeMethod() {
}

그들은 대중에 공개될 필요가 있다.

나는 실제로 spring-tool-suite-4-4.5.1고 드리고 싶어서 이 바이러스 시험 클래스를 사용한다.그리고 그 해결책 'java을 짓경로''junit5'로 라이브러리에 추가하는 것이었다.

여기에 이미지 설명 입력

그 해결책도: 도와 주었다.

문제는 이클립스 2018-12 JUnit 5.3.1항에 대한 지원이다.만약 당신이 버전과 그 전에 그것을 시작하면, 실패할 것입니다.

그래서 당신은 최소 그리고 5.3.1내지 사용하도록 확인하세요.

5.4.0 효과 너무.

사건이 네 부모 pom은 스프링 부팅에서(의존 관리에)그 junit-jupiter-api 같은 버전으로 설정되어 있는지 확인할 필요가 있다.당신은 junit-platform-runner 또는 -launcher 필요 없어요!

여기 Andrii Karaivanskyi의 대답에 이어는 메이븐 달의 변화 선언:.

<properties>
    ...
    <junit-jupiter.version>5.2.0</junit-jupiter.version>
    <junit-platform.version>1.2.0</junit-platform.version>
    ...
</properties>

<dependencies>
    ...
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit-jupiter.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-launcher</artifactId>
        <version>${junit-platform.version}</version>
        <scope>test</scope>
    </dependency>
    ...
</dependencies>

갱신하다

알렉산더 베셀에 의해 당 논평 여러분:junit-bom로 질문에 대한 그의 답변에 설명한 아니 시험 JUnit 5NoClassDefFoundError에 의해 LauncherFactory에 의한 발견 Eclipseorg.junit 사용할 수 있다.

라이브러리만 추가하면 되는 같은 문제에 직면했습니다.Junit Library는 이미 이클립스와 함께 제공되고 있기 때문에 아래를 따르기만 하면 됩니다.

[ Build Path ]> [ Configure Build Path ]> [ library ]> [ Add library ]> [ JUnit ]> [ Next ]> [

난 괜찮아

오류 입니다.NoClassDefFoundError라는 것을 합니다.

  1. 프로젝트 폴더를 마우스 오른쪽 버튼으로 클릭하고 Properties 또는 select project folder를 선택한 후 cmd + i 조합을 누릅니다.

  2. 목록에서 "Java 빌드 경로"를 선택합니다.

  3. "라이브러리" 탭 선택
  4. JUnit 5(또는 JUnit 4)가 "Modulepath"에 추가된 경우 "JUnit 5"를 선택하고 제거를 누릅니다.
  5. "Classpath"를 선택하고 "Add Library..."를 누릅니다..".
  6. 열린 "라이브러리 추가" 창에서 JUnit을 선택하고 다음을 누릅니다.
  7. 필요한 JUnit 라이브러리 버전을 선택하고 마침을 누릅니다.

그게 다야.테스트를 다시 실행해 보십시오.

대체:

import org.junit.Test;

포함:

import org.junit.jupiter.api.Test;

새로운 Test Case를 작성한 후에도 같은 문제가 발생하였습니다.Eclipse -> New -> JUnit Test Case액세스 레벨 수식자가 없는 클래스를 만듭니다.class 키워드 앞에 public을 붙이면 문제를 해결할 수 있었다.

들 알려주셔서 IDE로 .Eclipse ★★★★★★★★★★★★★★★★★」STS두 경우 모두 실패합니다.

회피책으로 pom.xml 파일을 아래와 같이 수정하였습니다.

두 했습니다.junit-jupiter-engine ★★★★★★★★★★★★★★★★★」junit-platform-launcher.

pom.xml

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit-jupiter.version}</version>
        <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform launcher -->
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-launcher</artifactId>
        <version>${junit-platform.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

또한 속성 태그에 두 maven 종속성의 버전을 추가해 주세요.

<properties>
    <java.version>1.8</java.version>
    <junit-jupiter.version>5.2.0</junit-jupiter.version>
    <junit-platform.version>1.2.0</junit-platform.version>
</properties>

다음 사항을 알아두십시오.

@before from junit4는 @Test: "import org.junit"로 되어 있습니다.테스트"

그리고.

@Junit5의 각 앞에는 "import org.junit"이 붙습니다.jupiter.api를 클릭합니다.테스트"

같은 버전의 Junit에서 Import한 것을 사용하고 있는지 확인해 주세요.그렇지 않으면 동작하지 않을 것입니다.

@테스트 주석을 org.junit에서 가져와야 합니다.jupiter.api를 클릭합니다.Junit5가 읽을 수 있도록 테스트합니다.Junit4는 org.junit에서 가져온 @Test 주석을 사용합니다.테스트 패키지

STS 3.9.1을 사용해도 같은 문제가 발생하였습니다.다만, 현재는 JUnit5의 새로운 기능은 필요 없기 때문에, 구버전을 강제적으로 사용하려고 했습니다.maven을 사용하는 경우 pom.xml에 다음 종속성을 추가할 수 있습니다.

<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-launcher</artifactId>
    <version>${junit.platform.version}</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>${junit.jupiter.version}</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <version>${junit.vintage.version}</version>
    <scope>test</scope>
</dependency>

이것은 나에게 효과가 있었습니다(적어도 JUnit5가 명시적으로 필요하지 않은 한).

저는 이클립스 2019-09를 사용하고 있습니다.

Junit-bom 버전을 최소 5.4.0으로 업데이트해야 했습니다.이전에 5.3.1을 앓았던 적이 있으며, 그 때문에 OP와 같은 증상이 발생했습니다.

현재 설정은 다음과 같습니다.

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.junit</groupId>
                <artifactId>junit-bom</artifactId>
                <version>5.5.2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

그룹 'org.junit.platform', 이름: 'junit-platform-launcher'를 가진 JUnit 5 플랫폼 런처가 없습니다.

POM을 추가합니다.

<dependency>
       <groupId>org.junit.platform</groupId>
       <artifactId>junit-platform-launcher</artifactId>
    </dependency>

코드 블록을 코멘트에 투고할 수 없기 때문에 JUnit 5가 필요한 프로젝트에서 사용하는 POM 템플릿입니다.이를 통해 Eclipse에서 "Run as JUnit Test"를 구축하고 플레인 메이븐을 사용하여 프로젝트를 구축할 수 있습니다.

<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>group</groupId>
    <artifactId>project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>project name</name>

    <dependencyManagement>
      <dependencies>
        <dependency>
        <groupId>org.junit</groupId>
        <artifactId>junit-bom</artifactId>
        <version>5.3.1</version>
        <type>pom</type>
        <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>

    <dependencies>
      <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-launcher</artifactId>
        <scope>test</scope>
      </dependency>

      <dependency>
        <!-- only required when using parameterized tests -->
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-params</artifactId>
        <scope>test</scope>
      </dependency>
    </dependencies>
</project>

JUnit을 업데이트하려면 버전을 한 곳에서만 업데이트하면 됩니다.또한 플랫폼버전번호는 POM 어디에도 (호환버전으로) 표시할 필요가 없습니다.이 번호는 POM을 통해 자동으로 관리됩니다.junit-bom수입품.

사용할 수 있는 것은junit-jupiter대신 테스트 의존성으로서junit-jupiter-api,junit-platform-launcher,junit-jupiter-engine.

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.5.2</version>
    <scope>test</scope>
</dependency>

사용하고 있는 것:

Spring Tool Suite 4 버전: 4.4.2.릴리즈 빌드 ID: 201911201053 Java 버전: 1.8.0_191

"테스트 러너 'JUnit5'를 사용하여 테스트를 찾을 수 없습니다"라는 메시지가 표시됩니다.

나에게 효과가 있었던 것은, 이하의 설정입니다.

    <properties>
        <java.version>1.8</java.version>
        <junit-jupiter.version>5.5.2</junit-jupiter.version>
        <junit-platform.version>1.5.2</junit-platform.version>
    </properties> 

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit-jupiter.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-launcher</artifactId>
        <version>${junit-platform.version}</version>
        <scope>test</scope>
    </dependency>

Import 할 수 있습니다.@Test부터org.junit.TestJUnit 4 주석입니다.Junit5 테스트 주자는 이를 검출하지 않습니다.

Junit5 테스트 주자는 다음과 같은 주석이 달린 테스트를 발견합니다.org.junit.jupiter.api.Test

Import org.junit에서 답을 찾았습니다.테스트 러너 "JUnit 5"를 사용하여 테스트를 찾을 수 없습니다"라는 오류가 발생함

Test Runner에서 액세스할 수 있도록 하려면 테스트 케이스 기능이 비공개 기능이 아닌 공개인지 확인해야 합니다.

@Test
private void testmethod(){}

로.

@Test
public void testmethod(){}

이클립스 버전 산소.3a 릴리스(4.7.3a)에서도 동일한 오류가 발생하였습니다.Maven Dependencies 불일치에 문제가 있습니다.문제를 해결하기 위해 Pom.xml을 다음과 같이 업데이트했습니다.

http://maven.apache.org/xsd/maven-4.0.0.xsd" > 4.0.0 com.http://flash.Junitnmactiopractice JunitAndMactioPractice 0.0.1-SNAPSHOT

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <junit.jupiter.version>5.1.1</junit.jupiter.version>
    <junit.platform.version>1.1.1</junit.platform.version>
</properties>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit.jupiter.version}</version>
    </dependency>
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-runner</artifactId>
        <version>${junit.platform.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

변해야 한다

@Test
public static void testmethod(){}

로.

@Test
public void testmethod(){}

@Test는 unsupport static 메서드입니다.

저는 JUnit 5 Library를 추가하도록 빌드 경로를 구성하고 종속성을 추가했습니다.

     <dependency> 
        <groupId>org.junit.platform</groupId> 
        <artifactId>junit-platform-launcher</artifactId> 
        <version>1.1.0</version> 
        <scope>test</scope> 
     </dependency>

따로따로

이클립스(버전: 2019-12 (4.14.0))에서도 이 문제에 직면했습니다.이 솔루션은 IntelliJ를 사용하거나 Maven 테스트를 사용하여 Eclipse에서 이러한 테스트를 실행하는 것으로 보입니다.

언급URL : https://stackoverflow.com/questions/46717693/eclipse-no-tests-found-using-junit-5-caused-by-noclassdeffounderror-for-launcher

반응형