Eclipse ไม่พบการทดสอบโดยใช้ JUnit 5 ที่เกิดจาก NoClassDefFoundError สำหรับ LauncherFactory


95

ปัญหา

เมื่อใดก็ตามที่ฉันรันการทดสอบ JUnit โปรเจ็กต์ของฉัน (โดยใช้ JUnit 5 กับ Java 9 และ Eclipse Oxygen 1.a) ฉันพบปัญหาว่าคราสไม่พบการทดสอบใด ๆ

คำอธิบาย

ภายใต้คอนฟิกูเรชันการรัน eclipse ไม่พบเมธอดที่ใส่คำอธิบายประกอบด้วย @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 จาก Buildpath แล้วเพิ่มอีกครั้ง
  • รีสตาร์ทคราส
  • ฉันยังย้ายโปรเจ็กต์ทั้งหมดจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่งและลองใช้กับการติดตั้งคราสที่ให้มาที่นั่น
  • เพื่อเปลี่ยนชื่อวิธีการทดสอบ
  • เพื่อพิมพ์คำอธิบายประกอบ @Test ซ้ำ

บางขั้นตอนเหล่านี้สามารถพบได้ที่นี่แต่สุดท้ายปัญหาก็ยังคงอยู่


แต่คุณพยายามค้นหาความแตกต่างตามที่ระบุไว้ในคำตอบนี้หรือไม่- stackoverflow.com/questions/34413/… ?
Naman

คำตอบ:


20

คุณพบข้อผิดพลาด Eclipse 525948ซึ่งได้รับการแก้ไขแล้วและซึ่งจะเผยแพร่ใน Oxygen.3 (4.7.3) ที่กำลังจะมีขึ้นในวันที่ 21 มีนาคม 2018

ในการแก้ปัญหาเบื้องต้นให้ใส่รหัสทดสอบของคุณในโปรเจ็กต์แยกต่างหากและเพิ่มโปรเจ็กต์ภายใต้การทดสอบลงในโมดูลพา ธ แต่อย่าเพิ่มโค้ดในโปรเจ็กต์module-info.javaทดสอบของคุณ ด้วยการตั้งชื่อโครงการคลาสและโมดูลควรมีลักษณะดังนี้:

ป้อนคำอธิบายภาพที่นี่

ดูวิดีโอของฉันที่แสดง Java 9 และ JUnit 5 ใน Eclipse Oxygen.1a ในการใช้งานจริง


1
@nullpointer ฉันหมายถึงการสร้างโปรเจ็กต์ Java ใหม่ที่ไม่ใช่โมดูลาร์ (ไม่มีmodule-info.java) ใน Eclipse โครงการ Java module-info.javaมีโฟลเดอร์ออกเดี่ยวและดังนั้นก็สามารถมีหนึ่งหรือไม่มี แต่คุณสามารถเพิ่มโมดูลลงใน modulepath ของโปรเจ็กต์ได้แม้ว่าโปรเจ็กต์จะไม่ใช่แบบโมดูล (ไม่มีmodule-info.java)
howlger

1
@ShadowDragon ข้อเสียเปรียบของการแฮ็กนี้คือเราต้องการชื่อแพ็คเกจที่แตกต่างกันสำหรับคลาสทดสอบจึงไม่สามารถทำการทดสอบแบบแพ็คเกจส่วนตัวได้
kleopatra

7
ฉันเพิ่งติดตั้ง Oxygen.3 (4.7.3) และปัญหายังคงมีอยู่
user118967

2
@chomp ถ้าคุณมีวันที่ 2018-09 มันเป็นปัญหาอื่นแม้ว่าอาการจะดูคล้ายกันก็ตาม หากไม่พบการทดสอบส่วนใหญ่เกิดจาก classpath / module path ที่ไม่ถูกต้อง ( Project> Properties: Java Build Path )
howlger

2
@howlger ขอบคุณ หลังจากอัปเกรดเป็นเวอร์ชันล่าสุดปัญหานี้ก็หายไป ขอขอบคุณอีกครั้งสำหรับความช่วยเหลือของคุณ :)
Datta

123

ฉันแก้ไขปัญหาโดยคลิกขวาที่การทดสอบและเลือก 'เรียกใช้การกำหนดค่า' และเปลี่ยนการเลือก "นักวิ่งทดสอบ:" เป็น "JUnit 4" ดังที่แสดงไว้ที่นี่:

ภาพหน้าจอของการกำหนดค่าการเรียกใช้

ฉันทำการทดสอบอีกครั้งและได้ผล


12
เป็นเรื่องตลกที่การเลือก "JUnit4" ในการกำหนดค่าการรันขณะใช้ JUnit5 ฉันจะไม่เรียกสิ่งนั้นว่าเป็นทางออกที่ดีที่ฉันสามารถพึ่งพาได้ในขณะที่ฉันกำลังจัดการกับโครงการใหญ่
Levent Divilioglu

1
ฉันยังพบว่าวิธีแก้ปัญหานี้น่าสงสัย แต่ก็ยังไม่มีคำอธิบายว่าเหตุใดจึงได้ผลและความเสี่ยงที่อาจเกิดขึ้น
Amadán

หากการทำเช่นนี้ไม่สามารถแก้ปัญหาให้คุณได้ให้ไปที่แท็บ classpath ในหน้าต่างเดียวกันและเพิ่ม JUnit ลงใน Bootstrap Libraries
Abhi

ขอบคุณ; การเลือก JUnit 4 ช่วยแก้ปัญหาของฉัน สำหรับตอนนี้วิธีนี้เป็นวิธีที่ง่ายที่สุดในการแก้ไขปัญหา
เทส

ในความคิดของฉันวิธีแก้ปัญหาที่รุกรานน้อยกว่านี้นั่นคือโดยไม่ต้องแก้ไขซอร์สโค้ด
Rafael Rocha

63

ฉันมีปัญหาเดียวกันกับ STS 3.9.1 ดูเหมือนว่าจะเป็นจุดบกพร่องของ Eclipse ในการแก้ไขปัญหานี้คุณสามารถเพิ่มการพึ่งพาการทดสอบ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


1
ถ้าใช้ gradle build.gradleมักจะไป หากคุณกำลังใช้ Maven pom.xmlมัน รูปแบบของ maven นั้นแตกต่างกันออกไป
Andrii Karaivanskyi

1
ที่แก้ไขให้ฉัน ขอบคุณ!
Chris

4
นี่คือตัวอย่างข้อมูล pom.xml ที่จะเข้าไปใน <dependency>: <dependency> <groupId> org.junit.jupiter </groupId> <artifactId> junit-jupiter-engine </artifactId> <version> 5.1.0 </version> <scope> test </scope> </dependency> <dependency> <groupId> org.junit.platform </groupId> <artifactId> junit-platform-launcher </artifactId> <version> 1.1.0 </version> < ขอบเขต> ทดสอบ </scope> </dependency>
user118967

1
การเพิ่มจูนิทแพลตฟอร์ม 1.1.0 ยังไม่ได้ผลสำหรับฉัน มีข้อความเดียวกันว่า "ไม่พบการทดสอบกับนักวิ่งทดสอบโดยใช้ JUnit 5" "
P Satish Patro

2
@PSatishPatro หลังจากเพิ่มด้านบน คุณต้องไปที่การกำหนดค่าสำหรับกรณีทดสอบ Junit นั้นจากนั้นไปที่แท็บ Classpath -> ขั้นสูง -> เพิ่มไลบรารี -> ตกลง -> Junit-> เสร็จสิ้น จากนั้นไปข้างหน้าและเรียกใช้สิ่งนี้จะเพิ่มห้องสมุดในระหว่างการดำเนินการของ Junit
Jaison Varghese

27

ในกรณีของฉันปัญหาคือตัวฉันเองและไม่มี IDE เช่น Eclipse ฉันได้นำเข้าคลาสทดสอบ JUnit 4 แล้ว

ดังนั้นอย่านำเข้าอันนี้:

import org.junit.Test  // JUnit 4

แต่อย่านำเข้าสิ่งนั้น:

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

ฉันกำลังสลับไปมาระหว่าง JUnit 4 และ 5 เนื่องจากโปรเจ็กต์ปัจจุบันใช้ JUnit 5 แต่เมื่อรายงานข้อบกพร่องไปยัง Hibernate เป็นต้นฉันจำเป็นต้องเปลี่ยนไปใช้ JUnit 4 ฉันพบว่าการผสมการนำเข้าโดยไม่ได้ตั้งใจ 🤦‍♂️
Kawu

20

คำตอบที่ผ่านมาไม่ได้แก้ไขปัญหาในการแชร์โค้ดกับผู้อื่นที่ไม่จำเป็นต้องใช้ Eclipse นี่คือหนึ่งโจทย์ กุญแจสำคัญคือการใช้โปรไฟล์ maven เพื่อแก้ปัญหา Eclipse Case

ถือว่าคุณได้กำหนดคุณสมบัติjunit5.versionใน pom ของคุณเช่น:

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

จากนั้นใน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...(หรือกดCtrl+ Alt+ P) จากนั้นตรวจสอบโปรไฟล์ "eclipse" ที่เราเพิ่งสร้างขึ้น

การเลือกโปรไฟล์ Maven

ด้วยการที่คุณทำเสร็จแล้ว Eclipse ของคุณจะเรียกใช้การทดสอบ Junit 5 ตามที่คาดไว้ แต่การกำหนดค่าที่คุณเพิ่มจะไม่ก่อให้เกิดมลพิษต่อบิวด์อื่นหรือ IDE อื่น


12

การเพิ่มการพึ่งพา maven กับ JUnit Jupiter (v.5.5.1) ช่วยแก้ปัญหาได้

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

ฉันมีโปรเจ็กต์ JAR ที่สร้างขึ้นสำหรับ Spring Boot 2.x ซึ่งนำเข้ามาใน JUnit 5 ฉันเพิ่มการอ้างอิงนี้และดูเหมือนว่าจะได้รับการแก้ไขแล้ว ขอบคุณ!
David Bradley

12

การแก้ไขอย่างง่าย: (เพิ่ม JUnit 5 Library)

คำแนะนำ:

  • คลิกขวาที่ project -> Build Path -> Configure Build Path
  • ในป๊อปอัป -> เพิ่มไลบรารี -> JUnit -> JUnit 5 -> เสร็จสิ้น -> นำไปใช้
  • คุณควรเห็น JUnit 5 Library (และขวดโหล) เพิ่มในโปรเจ็กต์ของคุณ
  • คลิกขวาที่โครงการ -> Maven -> Update Project -> OK

9

ไม่มีวิธีแก้ปัญหาใดช่วย:

ปัญหาคือ Eclipse 2018-12 รองรับ JUnit 5.3.1 หากคุณเริ่มด้วยเวอร์ชันก่อนหน้านั้นจะล้มเหลว

ดังนั้นให้แน่ใจว่าคุณใช้อย่างน้อย 5.3.1

5.4.0 ก็ใช้ได้เช่นกัน

ในกรณีที่ปอมแม่ของคุณเป็น Spring Boot คุณต้องแน่ใจว่า (ในการจัดการการพึ่งพา) ว่าjunit-jupiter-apiถูกตั้งค่าเป็นเวอร์ชันเดียวกัน คุณไม่จำเป็นต้องมีjunit-platform-runner หรือ -launcher !


2
ขอบคุณสำหรับทิป. ฉันใช้ 2019-3 และฉันเพิ่มคุณสมบัติ<junit-jupiter.version>5.4.1</junit-jupiter.version>เพื่อแทนที่เวอร์ชันที่ใช้ใน Spring boot (2.1.3.RELEASE)
Ritesh

3
นี่คือสิ่งที่แก้ไขให้ฉัน ฉันลบ -launcher dependency และมันก็เริ่มทำงาน (eclipse 2019-09 และ junit 5.4.2)
Raymond

วิธีนี้ใช้ได้ผลกับฉันเช่นกัน อย่างไรก็ตามในกรณีของฉันฉันเปลี่ยนจาก 5.3.1 เป็น 5.5.1 และ junit-platform-engine เป็น 1.5.1
Arwan Khoiruddin

1
สิ่งนี้แก้ไขให้ฉัน ในการทดสอบ eclipse 2020-03 ไม่ได้เริ่มต้นด้วย junit เวอร์ชัน 5.5.2 แต่มี 5.6.0 เป็นการอัปเดตทั่วไปสำหรับคำตอบของคุณ: อาจจำเป็นต้องใช้อย่างน้อยที่ใช้คราสเวอร์ชัน junit
Lars Briem

8

ต่อไปนี้คำตอบ Andrii Karaivanskyi ของที่นี่คือการประกาศ Maven POM:

<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>

อัปเดต

ตามความคิดเห็นโดยอเล็กซานเดเซิ่ลคุณสามารถใช้org.junit: junit-BOMที่อธิบายไว้ในคำตอบของเขาไปที่คำถามทดสอบคราสไม่พบการใช้ JUnit 5 เกิดจาก NoClassDefFoundError สำหรับ LauncherFactory


1
ไม่ได้ประกาศคุณสมบัติสำหรับดาวพฤหัสบดีและแพลตฟอร์มรุ่นใช้ BOM แทน โดยทั่วไปจะเพิ่มการอ้างอิงบน BOM ในแท็ก dependencyManagement ด้วยscope=import type=pomจากนั้นเพิ่มการอ้างอิงให้กับ junit-platform-launcher และ junit-jupiter-engine ในขอบเขตการทดสอบโดยไม่ต้องระบุเวอร์ชันในส่วนการอ้างอิง BOM จะตรวจสอบให้แน่ใจเสมอว่าคุณมี JUnit Platform และ Jupiter เพียงเวอร์ชันเดียวบนคลาสพา ธ และเวอร์ชันที่เกี่ยวข้องเป็นเวอร์ชันที่ต้องการ (เช่น 5.2.0 กับ 1.2.0)
Alexander Wessel

@AlexanderWessel ฉันไม่มี BOM นี่เป็นเพียงตัวอย่างที่ตัดตอนมาซึ่งการอ้างอิงที่เราต้องประกาศกับ Maven ไม่ว่าจะอยู่ที่ใดก็ตาม
Gerold Broser

1
ไม่ใช่เพราะคุณมี (หรือโครงการของคุณมี) BOM เอง ฉันอธิบายว่าด้วยการนำเข้า BOM ที่ JUnit 5 มีให้คุณสามารถมั่นใจได้ว่าเวอร์ชัน Junit Jupiter และ Junit Platform เข้ากันได้และคุณไม่จำเป็นต้องประกาศเวอร์ชันในการอ้างอิงแต่ละรายการดังนั้นจึงไม่จำเป็นต้องประกาศเวอร์ชันอีกต่อไป คุณสมบัติ. ต้องมีความชัดเจน: ตัวอย่างเช่นคุณไม่ปรับการทำงาน แต่การนำเข้า JUnit BOM นั้นดูหรูหรากว่าเล็กน้อย (ในความเห็นที่ต่ำต้อยของฉัน) และในบางสถานการณ์ก็ปลอดภัยกว่า
Alexander Wessel


7

FYI สาเหตุอีกประการหนึ่งของ "ไม่พบการทดสอบโดยใช้ junit5" คือ (โดยไม่ตั้งใจหรือโดยเจตนา) ประกาศกรณีทดสอบเป็น "ส่วนตัว":

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

พวกเขาต้องเปิดเผยต่อสาธารณะ


5

ฉันประสบปัญหาเดียวกันกับที่คุณต้องเพิ่มห้องสมุด Junit Library มีให้แล้วพร้อมกับ Eclipse ดังนั้นคุณต้องทำตามด้านล่าง

สร้างเส้นทาง> กำหนดค่าเส้นทางการสร้าง> ไลบรารี> เพิ่มไลบรารี> JUnit> ถัดไป> เสร็จสิ้น

มันใช้ได้กับฉัน


มันทำงานได้ดีในคราส เวอร์ชัน: 2020-06 (4.16.0) Build id: 20200615-1200
OJVM

4

จากจุดเริ่มต้นข้อความแสดงข้อผิดพลาดจะบอกคุณว่าไม่พบคลาส NoClassDefFoundErrorนั่นหมายความว่า PATH ถึง junit คือปัญหา

  1. กดคลิกขวาเพื่อโปรเจ็กต์โฟลเดอร์และเลือกคุณสมบัติหรือเลือกโฟลเดอร์โปรเจ็กต์แล้วกดผสม cmd + i

  2. เลือกจากรายการ "Java Build Path"

  3. เลือกแท็บ "Libraries"
  4. หากเพิ่ม JUnit 5 (หรือ JUnit 4) ใน "Modulepath" ให้เลือก "JUnit 5" แล้วกด Remove
  5. เลือก "Classpath" กด "Add Library ... "
  6. จากหน้าต่าง "เพิ่มไลบรารี" ที่เปิดอยู่ให้เลือก JUnit แล้วกดถัดไป
  7. เลือกเวอร์ชันไลบรารี JUnit ที่คุณต้องการแล้วกด Finish

นั้นคือทั้งหมด. ลองรันการทดสอบอีกครั้ง


4

คุณควรรู้ว่า:

@ ก่อนจากjunit4ไปกับ @Test: " import org.junit.Test "

และ

@BeforeEachจากJunit5ไปด้วย: " import org.junit.jupiter.api.Test "

ดังนั้นตรวจสอบให้แน่ใจว่าคุณใช้การนำเข้าจาก Junit เวอร์ชันเดียวกันไม่เช่นนั้นฉันเดาว่าจะไม่ได้ผล


3

ใช้ 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 อย่างชัดเจน)


ทำไมคุณถึงเพิ่ม "org.junit.vintage" ถ้าคุณใช้ JUnit5 ใช้สำหรับความเข้ากันได้แบบย้อนหลังเท่านั้น (เช่นการใช้ JUnit เก่า) AFAIK
Levent Divilioglu

เพราะด้วยโครงการนั้นและ STS 3.9.1 ฉันไม่สามารถ / ไม่ใช้ JUnit5 แต่เป็น JUnit4
mahe

3

ฉันพบปัญหาเดียวกันหลังจากสร้าง TestCase ใหม่: Eclipse -> New -> JUnit Test Case สร้างคลาสโดยไม่มีตัวปรับระดับการเข้าถึง ฉันสามารถแก้ปัญหาได้โดยเพียงแค่ใส่สาธารณะไว้หน้าคีย์เวิร์ดของคลาส


ทั้งคลาสและวิธีการต้องใช้คีย์เวิร์ดสาธารณะ junit.org/junit4/javadoc/4.12/org/junit/Test.html
hmehandi

3

ตามที่ทุกคนแจ้งว่าเป็นข้อผิดพลาด IDE ฉันจึงลองEclipseและSTSและทั้งสองกรณีล้มเหลว

เพื่อเป็นการแก้ปัญหาฉันได้แก้ไขโดยการแก้ไขไฟล์ pom.xml ดังต่อไปนี้

ฉันได้เพิ่มการอ้างอิง maven สองตัวนี้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>

1
การเพิ่มการพึ่งพา junit-platform-launcher ช่วยแก้ปัญหาให้ฉันได้ ขอบคุณ
Venkatesh Manohar

3

ฉันใช้ eclipse 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>

อีกทางเลือกหนึ่งคือเพิ่ม <junit-jupiter.version> 5.4.0 </junit-jupiter.version> ในคุณสมบัติ pom
Uri Loya

2

เนื่องจากเป็นไปไม่ได้ที่จะโพสต์บล็อกโค้ดลงในความคิดเห็นนี่คือเทมเพลต POM ที่ฉันใช้ในโปรเจ็กต์ที่ต้องใช้ JUnit 5 สิ่งนี้ทำให้สามารถสร้างและ "รันเป็น JUnit Test" ใน Eclipse และสร้างโปรเจ็กต์ด้วย Maven ธรรมดา

<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 ของคุณจะถูกจัดการโดยอัตโนมัติผ่านjunit-bomการนำเข้า


2

ฉันกำลังใช้:

Spring Tool Suite 4 เวอร์ชัน: 4.4.2.RELEASE Build 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>

2

คุณไม่มีตัวเรียกใช้งานแพลตฟอร์ม JUnit 5 กับกลุ่ม: 'org.junit.platform', ชื่อ: 'junit-platform-launcher'

เพียงเพิ่ม ur POM:

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

1

ข้อผิดพลาดเดียวกันกับที่ฉันพบใน eclipse เวอร์ชัน Oxygen.3a Release (4.7.3a) มีปัญหาในการพึ่งพา Maven ไม่ตรงกันเพื่อแก้ปัญหาฉันได้อัปเดต Pom.xml ของฉันด้วยการอ้างอิงต่อไปนี้

http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0 com.netapp.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>



1

คุณสามารถใช้เฉพาะjunit-jupiterเป็นพึ่งพาการทดสอบแทนjunit-jupiter-api, ,junit-platform-launcherjunit-jupiter-engine

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

1
โซลูชันนี้ใช้ได้กับฉันกับ JUnit 5.6.2, Java 11 (และ eclipse 2020-03 / 4.15.0)
coseos

1

สำหรับฉันฉันกำหนดค่าเส้นทางการสร้างเพื่อเพิ่ม JUnit 5 Library และโดยการเพิ่มการอ้างอิง

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

แยกกัน


1

ฉันประสบปัญหานี้กับ Eclipse (เวอร์ชัน: 2019-12 (4.14.0)) ด้วย ดูเหมือนว่าโซลูชันจะใช้ IntelliJ หรือใช้การทดสอบ Maven เพื่อเรียกใช้การทดสอบดังกล่าวใน Eclipse


1

ฉันใช้ spring-tool-suite-4-4.5.1 จริงๆและฉันมีข้อผิดพลาดนี้เมื่อฉันต้องการเรียกใช้คลาสทดสอบ และวิธีแก้ปัญหาคือการเพิ่ม 'java build path', 'junit5' ใน Libraries java build path img


0

คุณควรเปลี่ยน

@Test
public static void testmethod(){}

ถึง

@Test
public void testmethod(){}

@Test ไม่สนับสนุนวิธีการแบบคงที่


0

ฉันพบข้อผิดพลาดเดียวกันและในกรณีของฉันมันเป็นเรื่องง่ายที่จะไปProject Properties > Maven > Update projectและ / หรือทำความสะอาดและสร้างโครงการใหม่


0

เพิ่งเพิ่ม Test.class ของฉันผ่านเมนู eclipse และใช้งานได้ คลิกขวาเพื่อฉาย -> ใหม่ -> อื่น ๆ -> JUnit -> JUnit Test Case


0

อาจเกิดจากเวอร์ชันของ junit-platform-launcher / junit-platform-runner

1.1.0ไม่ทำงาน

1.4.1งานได้ในการตั้งค่าของฉัน

ฉันคิดว่านี่เป็นข้อผิดพลาดใน eclipse เนื่องจากมันทำงานกับไลบรารี junit เวอร์ชันที่สูงกว่าไม่ใช่เวอร์ชันอื่น

วิธีนี้ช่วยแก้ปัญหาของฉันได้ ความละเอียดอื่น ๆ ดูเป็นไปได้น้อยกว่าหรือมีความเสี่ยงสำหรับฉัน ขอบคุณ.


0

เมื่อฉันเปลี่ยนเวอร์ชัน jupiter api เป็นเวอร์ชันล่าสุดมันได้รับการแก้ไขแล้ว ในขณะเดียวกัน eclipse ของฉันและส่วนขยาย eclipse อื่น ๆ ของฉัน (เช่น STS) ได้รับข้อผิดพลาดในการสร้างพา ธ สำหรับการอัปเดต maven ทุกครั้ง ide บังคับให้ฉันตั้งค่า JRE System Library

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.