लांचरफैक्ट्री के लिए NoClassDefFoundError के कारण JUnit 5 का उपयोग करते हुए कोई भी परीक्षण नहीं मिला


99

समस्या

जब भी मैं अपनी परियोजनाएं चलाती हूं JUnit परीक्षण (जावा 9 और एक्लिप्स ऑक्सीजन 1.a के साथ JUnit 5 का उपयोग करके) मैं इस समस्या का सामना करता हूं कि ग्रहण कोई परीक्षण नहीं पा सकता है।

विवरण

रन कॉन्फ़िगरेशन के तहत, ग्रहण उस विधि को भी नहीं खोज सकता है जिसे @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 के साथ एनोटेट की गई विधि पर मँडरा कर परीक्षण शुरू करना और फिर "रन युटिट टेस्ट के रूप में चलाएँ" पर क्लिक करें।
  • Buildpath से JUnit निकालें और इसे फिर से जोड़ें
  • पुनः आरंभ करें
  • मैंने प्रोजेक्ट पूरी परियोजना को एक मशीन से दूसरी मशीन में भी स्थानांतरित कर दिया है और वहां प्रदान किए गए ग्रहण स्थापना के साथ इसका प्रयास किया है
  • परीक्षण विधि का नाम बदलने के लिए।
  • @Test एनोटेशन को फिर से टाइप करने के लिए

इनमें से कुछ चरण यहां देखे जा सकते हैं , लेकिन अंत में समस्या बनी रही।


लेकिन क्या आपने इस जवाब में बताया गया अंतर जानने की कोशिश की - stackoverflow.com/questions/34413/… ?
नमन

जवाबों:


22

आप ग्रहण बग 525948 में भाग गए, जो पहले ही तय हो चुका है और जिसे आगामी रिलीज Oxygen.3 (4.7.3), 21 मार्च, 2018 को प्रकाशित किया जाएगा।

वर्कअराउंड के रूप में, एक अलग प्रोजेक्ट में अपना टेस्ट कोड डालें और मॉड्यूलपाथ में परीक्षण के तहत प्रोजेक्ट जोड़ें, लेकिन module-info.javaअपने टेस्ट प्रोजेक्ट में जोड़ें नहीं । आपके प्रोजेक्ट, क्लास और मॉड्यूल के नामकरण के साथ, यह कुछ इस तरह दिखना चाहिए:

यहां छवि विवरण दर्ज करें

मेरे वीडियो को भी देखें जिसमें एक्सेलस ऑक्सीजन.1 ए में जावा 9 और ज्यूनिट 5 दिखाया गया है


1
@nullpointer मेरा मतलब है कि एक नया जावा प्रोजेक्ट बनाना है जो मॉड्यूलर नहीं है (नहीं module-info.java)। एक्लिप्स में एक जावा प्रोजेक्ट में एक ही आउटपुट फ़ोल्डर है और उसके बाद इसमें केवल एक या कोई भी नहीं हो सकता है module-info.java। लेकिन आप प्रोजेक्ट के मॉड्यूलपाथ में मॉड्यूल जोड़ सकते हैं, भले ही प्रोजेक्ट मॉड्यूलर न हो (कोई नहीं module-info.java)।
होल्गर

1
इस हैक के साथ @ShadowDragon की खामी यह है कि हमें परीक्षण कक्षाओं के लिए एक अलग पैकेज नाम की आवश्यकता है, इस प्रकार यह पैकेज-निजी परीक्षण नहीं कर सकता है
kleopatra

7
मैंने अभी Oxygen.3 (4.7.3) स्थापित किया है और समस्या बनी हुई है।
user118967

2
@chomp यदि आपके पास 2018-09 है, तो यह एक अलग मुद्दा है भले ही लक्षण समान दिखें। यदि कोई परीक्षण नहीं मिला, तो यह ज्यादातर गलत क्लासपैथ / मॉड्यूल पथ ( प्रोजेक्ट> गुण: जावा बिल्ड पथ ) के कारण होता है।
होल्गर

2
@ शुगल धन्यवाद नवीनतम संस्करण में अपग्रेड करने के बाद यह समस्या चली गई। आपकी सहायता के लिए एक बार फिर से धन्यवाद :)।
दत्ता

136

मैंने परीक्षण को राइट क्लिक करके और 'रन कॉन्फ़िगरेशन' का चयन करके और "टेस्ट रनर:" को 'JUnit 4' में बदलने के रूप में यहाँ दिखाया गया है:

रन कॉन्फ़िगरेशन का स्क्रीनशॉट

मैंने फिर से परीक्षण चलाया और यह काम किया।


13
यह मजेदार है कि JUnit5 का उपयोग करते समय रन कॉन्फ़िगरेशन में "JUnit4" का चयन करना। मैं उस अच्छे समाधान को नहीं कहूंगा जिसे मैं एक बड़ी परियोजना के साथ काम करते समय भरोसा कर सकता हूं।
लेवेंट डिविलीग्लू सेप

2
मुझे यह समाधान संदेहास्पद भी लगता है, इसमें एक स्पष्टीकरण का भी अभाव है कि यह क्यों काम करता है और किसी को क्या जोखिम हो सकता है।
आमदन

यदि ऐसा करने से आपके लिए समस्या हल नहीं हुई है तो उसी विंडो पर classpath टैब पर जाएं और JUnit को बूटस्ट्रैप लाइब्रेरी में जोड़ें।
अभि

धन्यवाद; JUnit 4 को चुनने से मेरे मुद्दों का समाधान हुआ अभी के लिए, यह समस्या को हल करने का सबसे सरल तरीका है।
टेस

मेरी राय में यह कम आक्रामक समाधान है, जो स्रोत कोड को संशोधित किए बिना है।
राफेल रोचा

65

मेरे पास एसटीएस 3.9.1 के साथ एक ही मुद्दा है। यह एक ग्रहण बग की तरह लगता है, हालांकि, इसे ठीक करने के लिए आप junit-platform-launcherअपनी परियोजना पर एक परीक्षण निर्भरता जोड़ सकते हैं ( https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher )

इस तरह से मैंने अपनी परियोजना के लिए जो कि ढाल का उपयोग करता है:

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
अगर आमतौर पर ग्रेडेल का उपयोग किया जाता है build.gradle। यदि आप मावेन का उपयोग कर रहे हैं pom.xml। मावेन के लिए प्रारूप हालांकि अलग है।
एंड्री कराईवन्सकी

1
उसने मेरे लिए इसे हल कर दिया। धन्यवाद!
क्रिस

4
यहां pom.xml स्निपेट <निर्भरता>: <निर्भरता> <groupId> org.junit.jupiter </ groupId> <विरूपण साक्ष्य> junit-jupiter- इंजन </ विरूपण साक्ष्य> <संस्करण> 5.1.0 </ संस्करण> <गुंजाइश> परीक्षण </ गुंजाइश> </ निर्भरता> <निर्भरता> <GroupId> org.junit.platform </ groupId> <विरूपण साक्ष्य> जूनियर-प्लेटफ़ॉर्म-लांचर </ विरूपण साक्ष्य> <संस्करण> 1.1.0 </ संस्करण> < गुंजाइश> परीक्षण </ गुंजाइश> </ निर्भरता>
user118967

1
फिर भी junit-platform 1.1.0 जोड़ना मेरे लिए कारगर नहीं रहा। यह एक ही संदेश दिखाता है "JUnit 5 का उपयोग करके परीक्षण धावक के साथ कोई परीक्षण नहीं मिला"
P सतीश पात्रो

2
@PSatishPatro उपरोक्त जोड़ने के बाद। आपको उस जुनित परीक्षण मामले के लिए कॉन्फ़िगरेशन चलाने के लिए जाने की आवश्यकता है और फिर Classpath टैब पर जाएँ-> उन्नत-> लाइब्रेरी जोड़ें-> OK-> Junit-> समाप्त करें। फिर आगे बढ़ें और इसे चलाएं। यह जुन्निट के निष्पादन के दौरान पुस्तकालय को जोड़ देगा
Jaison Varghese

28

मेरे मामले में, समस्या स्वयं थी और ग्रहण की तरह कोई आईडीई नहीं थी। मैंने JUnit 4 टेस्ट क्लास आयात किया है।

इसलिए इसे आयात न करें:

import org.junit.Test  // JUnit 4

लेकिन यह आयात करें:

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

मैं JUnit 4 और 5 के बीच स्विच कर रहा था क्योंकि वर्तमान परियोजना JUnit 5 का उपयोग कर रही है, लेकिन जब बग्स को हाइबरनेट आदि पर रिपोर्ट करना है तो मुझे JUnit 4 पर स्विच करने की आवश्यकता है। मैंने गलती से आयात को मिला दिया। 🤦🤦 21
कावु

21

उत्तर अब तक अन्य लोगों के साथ कोड साझा करने की समस्या को स्वीकार नहीं करते थे, जो जरूरी नहीं कि ग्रहण का उपयोग करते हैं। यहाँ एक प्रस्ताव है। ग्रहण केस को हल करने के लिए मावेन प्रोफाइल का उपयोग करना महत्वपूर्ण है।

यह मानता है कि आपने junit5.versionअपने पोम में एक संपत्ति को परिभाषित किया है :

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

इसके बाद आपको केवल अपने स्थानीय ग्रहण में प्रोफ़ाइल का चयन करना है: अपनी परियोजना पर राइट क्लिक करें और चुनें Maven > Select Maven Profiles...(या हिट Ctrl+ Alt+ P), और फिर हमारे द्वारा बनाए गए "ग्रहण" प्रोफ़ाइल की जांच करें।

मावेन प्रोफाइल का चयन

उसके साथ तुम हो गए हो। आपका ग्रहण उम्मीद के मुताबिक जून 5 परीक्षण चलाएगा, लेकिन आपके द्वारा जोड़ा गया कॉन्फ़िगरेशन अन्य बिल्ड या अन्य आईडीई को प्रदूषित नहीं करेगा


14

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>

मेरे पास स्प्रिंग बूट 2.x के लिए एक JAR प्रोजेक्ट था जो JUnit 5 में लाया गया था। मैंने इस निर्भरता को जोड़ा और यह इसे तय करता प्रतीत होता है। धन्यवाद!
डेविड ब्रैडली

14

सरल FIX: (JUnit 5 लाइब्रेरी जोड़ें)

निर्देश:

  • प्रोजेक्ट पर राइट क्लिक करें -> बिल्ड पाथ -> कन्फर्म बिल्ड पाथ
  • पॉप-अप में -> लाइब्रेरी जोड़ें -> जॉनीट -> जुनाइट 5 -> समाप्त -> लागू करें
  • आपको JUnit 5 लाइब्रेरी (और उसके जार) को अपने प्रोजेक्ट में जोड़ा जाना चाहिए
  • प्रोजेक्ट पर राइट क्लिक करें -> मैवेन -> अपडेट प्रोजेक्ट -> ओके

9

समाधानों में से किसी ने भी मदद नहीं की:

समस्या यह है कि ग्रहण 2018-12 में JUnit 5.3.1 का समर्थन है। यदि आप इससे पहले एक संस्करण के साथ शुरू करते हैं, तो यह विफल हो जाएगा।

इसलिए सुनिश्चित करें कि आप कम से कम 5.3.1 का उपयोग करें।

5.4.0 भी काम करता है।

यदि आपका मूल पोम स्प्रिंग बूट है, तो आपको यह सुनिश्चित करने की आवश्यकता है (निर्भरता प्रबंधन में) कि जूनिट-ज्यूपिटर-एपी एक ही संस्करण में सेट है। आपको जूनियर-प्लेटफॉर्म-रनर या -लंचर की जरूरत नहीं है !


2
पारितोषिक के लिए धन्यवाद। मैं 2019-3 का उपयोग कर रहा हूं और मैंने <junit-jupiter.version>5.4.1</junit-jupiter.version>स्प्रिंग बूट (2.1.3.RELEASE) में उपयोग किए गए संस्करण को ओवरराइड करने के लिए संपत्ति जोड़ी ।
रितेश

3
यह वह था जिसने इसे मेरे लिए तय किया। मैंने -लंचर निर्भरता को हटा दिया और इसने काम करना शुरू कर दिया। (ग्रहण २०१ ९-९ और जं। ५.४.२)
रेमंड

यह समाधान मेरे लिए भी काम करता है। हालाँकि, मेरे मामले में, मैं 5.3.1 से 5.5.1 और जूनियर-प्लेटफ़ॉर्म-इंजन से 1.5.1 में बदल गया।
अरवन खोरुद्दीन

1
इसने मेरे लिए इसे ठीक कर दिया। ग्रहण में 2020-03 के परीक्षण कनिष्ठ संस्करण 5.5.2 के साथ नहीं बल्कि 5.6.0 के साथ शुरू हुए। आपके उत्तर के लिए एक सामान्य अद्यतन के रूप में: यह कम से कम कनिष्ठ संस्करण का उपयोग करने के लिए आवश्यक हो सकता है।
लार्स ब्रिएम

8

बाद एंड्री Karaivanskyi का जवाब यहाँ 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>

अपडेट करें

द्वारा टिप्पणी के अनुसार अलेक्जेंडर Wessel आप उपयोग कर सकते JUnit-bom: org.junit में वर्णित के रूप अपना जवाब सवाल का JUnit 5 LauncherFactory के लिए NoClassDefFoundError की वजह से उपयोग कर पाया ग्रहण नहीं परीक्षण


1
बृहस्पति और प्लेटफ़ॉर्म संस्करणों के लिए गुणों की घोषणा न करें, इसके बजाय BOM का उपयोग करें । मूल रूप से निर्भरता प्रबंधन टैग में BOM पर निर्भरता scope=import type=pomजोड़ते हैं, फिर निर्भरता अनुभाग में एक संस्करण दिए बिना , परीक्षण के दायरे में जूनियर-प्लेटफॉर्म-लॉन्चर और जूनिट-ज्यूपिटर-इंजन पर निर्भरता जोड़ते हैं । BOM हमेशा यह सुनिश्चित करेगा कि आपके पास Classpath पर JUnit Platform और Jupiter का केवल एक ही संस्करण है, और यह कि संबंधित संस्करण अभीष्ट हैं (उदाहरण के लिए 1.2.0 के साथ 5.2.0)।
अलेक्जेंडर वेसल

@AlexanderWessel मेरे पास कोई BOM नहीं है। यह केवल एक उदाहरण है जो निर्भर करता है कि किसी को भी मावेन के साथ घोषणा करनी होगी, जहां भी यह हो सकता है।
जेरोल्ड ब्रोसर

1
यह आपके पास कोई बीओएम नहीं है (या आपके प्रोजेक्ट के बजाय) है। मैं समझा रहा था कि BOM को आयात करके जो JUnit 5 प्रदान करता है , आप यह सुनिश्चित कर सकते हैं कि Junit Jupiter और Junit Platform संस्करण संगत हैं, और आपको व्यक्तिगत निर्भरता में संस्करण घोषित करने की आवश्यकता नहीं होगी, इस प्रकार अब संस्करण घोषित करने की भी आवश्यकता नहीं है। गुण। स्पष्ट होने के लिए: आपका उदाहरण ठीक काम करता है। लेकिन JUnit BOM का आयात थोड़ा अधिक सुरुचिपूर्ण (मेरी विनम्र राय में) और, कुछ परिस्थितियों में, सुरक्षित है।
अलेक्जेंडर वेसल


7

FYI करें, "junit5 का उपयोग करके कोई परीक्षण नहीं मिला" का एक अन्य कारण (अनजाने में या जानबूझकर) परीक्षण के मामलों को "निजी" घोषित करना है:

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

उन्हें सार्वजनिक होने की जरूरत है।


7

मुझे भी उसी मुद्दे का सामना करना पड़ा, जिसमें आपको सिर्फ लाइब्रेरी जोड़ने की जरूरत है, जूनिट लाइब्रेरी पहले से ही ग्रहण के साथ प्रदान की जाती है, इसलिए आपको बस नीचे दिए गए निर्देशों का पालन करना होगा

बनाएँ पथ> कॉन्फ़िगर पथ> पुस्तकालय> पुस्तकालय जोड़ें> JUnit> अगला> समाप्त करें

इससे मेरा काम बनता है


इसने ग्रहण में ठीक काम किया। संस्करण: 2020-06 (4.16.0) बिल्ड आईडी: 20200615-1200
OJVM

4

एक नया TestCase बनाने के बाद मुझे यही समस्या मिली: ग्रहण -> नया -> JUnit Test Case। यह पहुँच स्तर संशोधक के बिना एक वर्ग बनाता है। मैं क्लास कीवर्ड से पहले सिर्फ एक सार्वजनिक समस्या को हल कर सकता था ।


कक्षा और विधि दोनों के लिए आवश्यक है सार्वजनिक कीवर्ड। junit.org/junit4/javadoc/4.12/org/junit/Test.html
hmehandi

4

प्रारंभ से त्रुटि संदेश आपको बताता है कि वर्ग नहीं मिला है: NoClassDefFoundErrorइसका मतलब है कि पथ से लेकर जूनियर तक की समस्या है।

  1. प्रोजेक्ट फ़ोल्डर पर दायाँ क्लिक करें और गुण चुनें या प्रोजेक्ट फ़ोल्डर चुनें और संयोजन cmd + i दबाएँ।

  2. सूची से चुनें "जावा बिल्ड पाथ"।

  3. "लाइब्रेरीज़" टैब चुनें
  4. यदि JUnit 5 (या JUnit 4) को "Modulepath" में जोड़ा जाता है, तो "JUnit 5" चुनें और निकालें दबाएं।
  5. "क्लासपाथ" चुनें, "लाइब्रेरी जोड़ें ..." दबाएं।
  6. "लाइब्रेरी जोड़ें" विंडो से, JUnit चुनें, अगला दबाएं।
  7. JUnit लाइब्रेरी संस्करण का चयन करें जिसकी आपको आवश्यकता है और फिनिश दबाएं।

बस इतना ही। पुन: परीक्षण चलाने का प्रयास करें।


4

आपको यह पता होना चाहिए :

@Before से junit4 @Test साथ चला जाता है: " आयात org.junit.Test "

तथा

Junit5 से @BeforeEach जाता है: " import org.junit.jupiter.api.Test "

इसलिए सुनिश्चित करें कि आप Junit के एक ही संस्करण से आयात का उपयोग कर रहे हैं, अन्यथा यह मुझे लगता है कि काम नहीं करेगा।


3

STS 3.9.1 के उपयोग से मुझे भी यही समस्या हुई। हालाँकि, वर्तमान में मुझे किसी नए JUnit5 फीचर्स की आवश्यकता नहीं है, इसलिए मैंने पुराने संस्करण का उपयोग करने के लिए मजबूर करने की कोशिश की। मावेन का उपयोग करते हुए, आप अपने 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 की आवश्यकता नहीं है)।


यदि आप JUnit5 का उपयोग कर रहे हैं तो आपने "org.junit.vlife" को क्यों जोड़ा? यह केवल पिछड़ी संगतता के लिए है (जैसे पुराने JUnit का उपयोग करके) AFAIK।
लेवेंट डिविलीग्लू

क्योंकि उस परियोजना और एसटीएस 3.9.1 के साथ मैं JUnit5 का उपयोग नहीं कर सकता / सकती, लेकिन JUnit4।
माहे

3

जैसा कि हर कोई यह की आईडीई बग को सूचित किया, मैं करने की कोशिश की 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>

कृपया गुण टैग में दोनों मावेन निर्भरता के संस्करण को जोड़ना सुनिश्चित करें।

<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
जूनियर-प्लेटफॉर्म-लॉन्चर निर्भरता को जोड़ने से मेरे लिए समस्या हल हो गई। धन्यवाद
वेंकटेश मनोहर

3

मैं ग्रहण 2019-09 का उपयोग कर रहा हूं।

मुझे जूनियर-बम संस्करण को कम से कम 5.4.0 अपडेट करना पड़ा। मेरे पास पहले 5.3.1 था और ओपी के समान लक्षण थे।

मेरा विन्यास अब है:

    <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 टेस्ट" चलाने की अनुमति देता है और सादे मावेन के साथ परियोजना का निर्माण करता है।

<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

मैं उपयोग कर रहा हूँ:

स्प्रिंग टूल सूट 4 संस्करण: 4.4.2.रिलीज़ बिल्ड आईडी: 201911201053 जावा संस्करण: 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', नाम: 'जूनियर-प्लेटफ़ॉर्म-लॉन्चर'

बस उर पोम में जोड़ें:

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

1

उसी त्रुटि का मुझे ग्रहण संस्करण Oxygen.3a रिलीज़ (4.7.3a) में सामना करना पड़ा। Maven Dependencies में बेमेल समस्या है। इसके समाधान के लिए मैंने निम्नलिखित निर्भरता के साथ अपने Pom.xml को अपडेट किया है।

http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0 com.netapp.junitnmactiop प्रैक्टिस JunitAndMactioP प्रैक्टिस 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-launcher, junit-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, जावा 11 (और ग्रहण 2020-03 / 4.15.0) के साथ काम किया
कोसो

1

मेरे लिए, मैंने JUnit 5 लाइब्रेरी को जोड़ने के लिए और निर्भरता जोड़कर बिल्ड पथ को कॉन्फ़िगर किया

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

अलग से।


1

मैंने इस मुद्दे को ग्रहण (संस्करण: 2019-12 (4.14.0)) के साथ भी सामना किया। समाधान या तो IntelliJ का उपयोग करने के लिए या ग्रहण में ऐसे परीक्षणों को चलाने के लिए मावेन परीक्षण का उपयोग करने के लिए लगता है।



1

मैंने वास्तव में स्प्रिंग-टूल-सूट-4-4.5.1 का उपयोग किया था और मुझे यह बग तब मिला जब मैं एक टेस्ट क्लास चलाना चाहता हूं। और इसका समाधान पुस्तकालयों में 'जावा बिल्ड पाथ', 'जूनिट 5' को जोड़ना था

यहां छवि विवरण दर्ज करें


0

आपको बदलना चाहिए

@Test
public static void testmethod(){}

सेवा

@Test
public void testmethod(){}

@Test असमर्थित स्थैतिक विधि है


0

मैं उसी त्रुटि में भाग गया, और मेरे मामले में यह Project Properties > Maven > Update projectपरियोजना के लिए जाने और / या सफाई और पुनर्निर्माण का एक साधारण मामला था ।


0

बस ग्रहण मेनू के माध्यम से मेरे Test.class को जोड़ा और काम किया। प्रोजेक्ट पर राइट क्लिक करें -> नया -> अन्य -> ​​JUnit -> JUnit Test Case


0

यह जूनियर-प्लेटफॉर्म-लॉन्चर / जूनियर-प्लेटफॉर्म-रनर के संस्करण के कारण हो सकता है।

1.1.0 काम नहीं करता है

1.4.1 मेरे सेटअप में काम करता है।

मुझे लगता है कि यह ग्रहण में एक बग है क्योंकि यह उच्च संस्करण पुस्तकालयों के साथ काम कर रहा है, न कि अन्य संस्करण।

इससे मेरी समस्या हल हो गई। अन्य प्रस्ताव मुझे कम व्यावहारिक या जोखिम भरा लग रहा था। धन्यवाद।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.