Masalah
Setiap kali saya menjalankan tes JUnit proyek saya (menggunakan JUnit 5 dengan Java 9 dan Eclipse Oxygen 1.a) Saya mengalami masalah karena gerhana tidak dapat menemukan tes apa pun.
Deskripsi
Di bawah konfigurasi run, eclipse bahkan tidak dapat menemukan metode yang dianotasi dengan @Test, tetapi hanya menampilkan " (semua metode) " kepada saya. Gambar berikut semoga memberikan gambaran yang lebih baik tentang pengaturan saya:
Keluaran konsol:
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
Apa yang saya coba sejauh ini
Saya sudah mencoba
- untuk menghapus folder uji dari jalur build dan menambahkannya lagi.
- untuk memulai pengujian dengan mengarahkan kursor ke metode yang dianotasi dengan @Test lalu klik "Run as JUnit Test".
- hapus JUnit dari Buildpath dan tambahkan lagi
- mulai ulang gerhana
- Saya juga telah memindahkan keseluruhan proyek dari satu mesin ke mesin lain dan mencobanya dengan instalasi gerhana yang disediakan di sana
- untuk mengganti nama metode pengujian.
- untuk mengetik ulang anotasi @Test
Beberapa dari langkah-langkah ini dapat ditemukan di sini , tetapi pada akhirnya masalahnya tetap ada.
Jawaban:
Anda mengalami bug Eclipse 525948 yang telah diperbaiki dan akan diterbitkan dalam rilis mendatang Oxygen.3 (4.7.3), 21 Maret 2018.
Sebagai solusinya, letakkan kode pengujian Anda di project terpisah dan tambahkan project yang sedang diuji ke modulepath, tetapi jangan tambahkan a
module-info.java
ke project pengujian Anda. Dengan penamaan proyek, kelas dan modul Anda, seharusnya terlihat seperti ini:Lihat juga video saya yang menunjukkan Java 9 dan JUnit 5 di Eclipse Oxygen.1a beraksi
sumber
module-info.java
). Dalam Eclipse, sebuah proyek Java memiliki satu folder output dan karenanya hanya dapat berisi satu atau tidak sama sekalimodule-info.java
. Tetapi Anda dapat menambahkan modul ke modulepath proyek meskipun proyek tersebut tidak modular (tidak memilikimodule-info.java
).Saya memperbaiki masalah ini dengan mengklik kanan tes dan memilih 'Run Configurations' dan mengubah pilihan "Test runner:" menjadi 'JUnit 4' seperti yang ditunjukkan di sini:
Saya menjalankan tes lagi dan berhasil.
sumber
Saya memiliki masalah yang sama dengan STS 3.9.1. Sepertinya ada bug Eclipse, namun untuk memperbaikinya, Anda dapat menambahkan dependensi uji
junit-platform-launcher
ke proyek Anda ( https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher )Inilah yang saya lakukan untuk proyek saya yang menggunakan 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}" }
file gradle.properties:
junit5MinorVersion=1.0
Saya yakin hal yang sama berlaku jika Anda melihat pengecualian ini saat menggunakan IntelliJ IDEA.
sumber
build.gradle
. Jika Anda menggunakan maven itupom.xml
. Format untuk maven berbeda.Dalam kasus saya, masalahnya adalah diri saya sendiri dan tidak ada IDE seperti Eclipse. Saya telah mengimpor kelas JUnit 4 Test.
Jadi JANGAN impor yang ini:
import org.junit.Test // JUnit 4
Tapi, impor yang itu:
import org.junit.jupiter.api.Test // JUnit 5
sumber
Jawaban sejauh ini tidak mengatasi masalah berbagi kode dengan orang lain yang belum tentu menggunakan Eclipse. Inilah satu proposisi. Kuncinya adalah menggunakan profil maven untuk memecahkan Eclipse Case.
Ini mengasumsikan Anda telah menentukan properti
junit5.version
di pom Anda seperti:<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit5.version>5.1.1</junit5.version> </properties>
lalu di
profiles
bagian tambahkan yang berikut ini:<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>
Yang harus Anda lakukan setelah ini adalah memilih profil di Eclipse lokal Anda: Klik kanan pada proyek Anda dan pilih
Maven > Select Maven Profiles...
(atau tekan Ctrl+ Alt+ P), lalu periksa profil "gerhana" yang baru saja kita buat.Dengan itu Anda sudah selesai. Eclipse Anda akan menjalankan pengujian Junit 5 seperti yang diharapkan, tetapi konfigurasi yang Anda tambahkan tidak akan mencemari build lain atau IDE lain
sumber
Menambahkan ketergantungan maven ini dengan JUnit Jupiter (v.5.5.1) memecahkan masalah.
<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.5.1</version> <scope>test</scope> </dependency>
sumber
PERBAIKAN SEDERHANA: (Tambahkan JUnit 5 Library)
PETUNJUK:
sumber
Tidak ada solusi yang membantu:
Masalahnya adalah Eclipse 2018-12 memiliki dukungan untuk JUnit 5.3.1. Jika Anda memulainya dengan versi sebelumnya, itu akan gagal.
Jadi pastikan Anda menggunakan setidaknya 5.3.1.
5.4.0 juga berfungsi.
Jika pom induk Anda adalah Spring Boot, Anda perlu memastikan (dalam manajemen ketergantungan) bahwa junit-jupiter-api disetel ke versi yang sama. Anda tidak perlu junit-platform-runner atau -launcher !
sumber
<junit-jupiter.version>5.4.1</junit-jupiter.version>
untuk mengganti versi yang digunakan dalam boot Musim Semi (2.1.3.RELEASE).Berikut jawaban Andrii Karaivanskyi berikut deklarasi POM Maven:
<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>
MEMPERBARUI
Sesuai komentar oleh Alexander Wessel Anda dapat menggunakan org.junit: junit-bom seperti yang dijelaskan dalam jawabannya atas pertanyaan Eclipse Tidak ada tes yang ditemukan menggunakan JUnit 5 yang disebabkan oleh NoClassDefFoundError untuk LauncherFactory .
sumber
scope=import type=pom
, lalu tambahkan dependensi ke junit-platform-launcher dan junit-jupiter-engine dalam cakupan pengujian, tanpa memberikan versi di bagian dependensi. BOM akan selalu memastikan bahwa Anda hanya memiliki satu versi Platform JUnit dan Jupiter di classpath, dan versi masing-masing adalah versi yang diinginkan (misalnya 5.2.0 dengan 1.2.0).FYI, penyebab lain dari "Tidak ada pengujian yang ditemukan menggunakan junit5" adalah (secara tidak sengaja atau sengaja) mendeklarasikan kasus pengujian "pribadi":
// Example of test case that doesn't get included @Test private void testSomeMethod() { }
Mereka harus terbuka untuk umum.
sumber
Saya juga menghadapi masalah yang sama Anda hanya perlu menambahkan perpustakaan, Perpustakaan Junit sudah disediakan bersama dengan Eclipse jadi Anda hanya perlu mengikuti di bawah ini
Build Path> Configure Build Path> library> Add library> JUnit> Next> finish
Ini bekerja untuk saya
sumber
Dari awal pesan kesalahan memberitahu Anda bahwa kelas tidak ditemukan:
NoClassDefFoundError
itu berarti PATH ke junit adalah masalahnya.Tekan klik kanan ke folder proyek dan pilih Properties ATAU pilih folder proyek dan tekan kombinasi cmd + i.
pilih dari daftar "Java Build Path".
Itu semuanya. Coba jalankan pengujian lagi.
sumber
Anda harus tahu bahwa:
@Before dari junit4 menggunakan @Test : " import org.junit.Test "
DAN
@BeforeEach dari Junit5 cocok dengan: " import org.junit.jupiter.api.Test "
jadi pastikan Anda menggunakan impor dari versi yang sama dari Junit, jika tidak maka saya rasa tidak akan berhasil.
sumber
Menggunakan STS 3.9.1 Saya mendapat masalah yang sama. Namun, saat ini saya tidak memerlukan fitur JUnit5 baru, jadi saya mencoba memaksa menggunakan versi yang lebih lama. Jika menggunakan maven, Anda dapat menambahkan dependensi berikut ke pom.xml Anda:
Ini melakukan trik untuk saya (setidaknya selama saya tidak membutuhkan JUnit5 secara eksplisit).
sumber
Saya mendapat masalah yang sama setelah membuat TestCase baru: Eclipse -> New -> JUnit Test Case. Ini membuat kelas tanpa pengubah tingkat akses. Saya bisa memecahkan masalah hanya dengan meletakkan publik sebelum kata kunci kelas .
sumber
Seperti yang diinformasikan semua orang itu bug IDE, saya mencoba
Eclipse
danSTS
. Dalam kedua kasus tersebut, itu gagal.Sebagai solusinya, saya telah memperbaikinya dengan memodifikasi file pom.xml seperti di bawah ini.
Saya telah menambahkan dua dependensi maven ini
junit-jupiter-engine
danjunit-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>
Pastikan juga untuk menambahkan versi kedua dependensi maven di tag properti.
<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>
sumber
Saya menggunakan eclipse 2019-09.
Saya harus memperbarui versi junit-bom setidaknya menjadi 5.4.0. Saya sebelumnya memiliki 5.3.1 dan itu menyebabkan gejala OP yang sama.
Konfigurasi saya sekarang:
<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>
sumber
Karena tidak mungkin mengirim blok kode ke dalam komentar, inilah template POM yang saya gunakan dalam proyek yang membutuhkan JUnit 5. Ini memungkinkan untuk membangun dan "Jalankan sebagai Uji JUnit" di Eclipse dan membangun proyek dengan Maven biasa.
<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>
Anda dapat melihat bahwa sekarang Anda hanya perlu memperbarui versi di satu tempat jika Anda ingin memperbarui JUnit. Juga nomor versi platform tidak perlu muncul (dalam versi yang kompatibel) dimanapun di POM Anda, itu secara otomatis dikelola melalui
junit-bom
impor.sumber
Saya menggunakan:
Spring Tool Suite 4 Versi: 4.4.2. RELEASE Build Id: 201911201053 Versi Java: 1.8.0_191
dan pesan yang ditampilkan adalah Tidak ada pengujian yang ditemukan dengan runner pengujian 'JUnit5'
yang berhasil bagi saya adalah konfigurasi di bawah ini
<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>
sumber
Anda kehilangan peluncur platform JUnit 5 dengan grup: 'org.junit.platform', nama: 'junit-platform-launcher'
Cukup tambahkan di POM Anda:
sumber
Kesalahan yang sama yang saya hadapi dalam versi gerhana Oxygen.3a Release (4.7.3a). Ada masalah dalam ketidakcocokan Dependensi Maven. Untuk mengatasinya, saya telah memperbarui Pom.xml saya dengan ketergantungan berikut.
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>
sumber
junit-platform-runner
: " Pelari untuk menjalankan pengujian dan rangkaian pengujian pada Platform JUnit di lingkungan JUnit 4. "Anda dapat menggunakan hanya
junit-jupiter
sebagai ketergantungan tes bukanjunit-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>
sumber
Bagi saya, saya mengonfigurasi jalur build untuk menambahkan JUnit 5 Library dan juga dengan menambahkan dependensi
<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.1.0</version> <scope>test</scope> </dependency>
secara terpisah.
sumber
Saya menghadapi masalah ini dengan Eclipse (Versi: 2019-12 (4.14.0)) juga. Solusinya tampaknya menggunakan IntelliJ atau menggunakan pengujian Maven untuk menjalankan pengujian semacam itu di Eclipse.
sumber
Saya sebenarnya menggunakan spring-tool-suite-4-4.5.1 dan saya mengalami bug ini ketika saya ingin menjalankan kelas pengujian. dan solusinya adalah dengan menambahkan 'java build path', 'junit5' di Library java build path img
sumber
kamu harus berubah
@Test public static void testmethod(){}
untuk
@Test public void testmethod(){}
@Test adalah metode statis yang tidak mendukung
sumber
Saya mengalami kesalahan yang sama, dan dalam kasus saya itu adalah masalah sederhana untuk pergi
Project Properties > Maven > Update project
dan / atau membersihkan dan membangun kembali proyek.sumber
Baru saja menambahkan Test.class saya melalui menu eclipse dan berfungsi. Klik kanan untuk memproyeksikan -> New -> Other -> JUnit -> JUnit Test Case
sumber
Ini mungkin disebabkan oleh versi junit-platform-launcher / junit-platform-runner.
1.1.0 tidak berfungsi
1.4.1 berfungsi di pengaturan saya.
Saya pikir ini adalah bug di eclipse karena bekerja dengan perpustakaan versi junit yang lebih tinggi dan bukan versi lain.
Ini menyelesaikan masalah saya. Resolusi lain tampak kurang layak atau berisiko bagi saya. Terima kasih.
sumber
Ketika saya mengubah versi jupiter api saya menjadi yang terbaru, itu terpecahkan. Sementara itu, ide eclipse saya dan ekstensi eclipse lainnya (seperti STS) mendapatkan build path error. Untuk setiap pembaruan maven, ide memaksa saya untuk mengatur Perpustakaan Sistem JRE.
sumber