IntelliJ 2017.2 का उपयोग करके मेरे प्रोजेक्ट को java8 + Junit5 पर माइग्रेट करने का प्रयास कर रहा है

मैंने junit-jupiter-api संस्करण 5.0.0-M6 जोड़ा है

और junit-platform-launcher संस्करण 1.0.0-M6

परियोजना संरचना एक डिफ़ॉल्ट मावेन सम्मेलन है src/test/java

इस बारे में कुछ लेख मिले लेकिन उनमें से किसी ने भी मेरी समस्या का समाधान नहीं किया।

यह कंसोल में अच्छी तरह से चलता है, मुझे लगता है कि यह IntelliJ डिफ़ॉल्ट जुनीट रनर के साथ कुछ करना है, या मुझे कुछ निर्भरताएं याद आ रही हैं?


जब मैं एक एकल परीक्षण वर्ग चलाता हूं तो सब ठीक काम करता है लेकिन जब मैं निर्देशिका का चयन करता हूं और Run all 'Tests' in Java जैसे मैं करता था तो मुझे कुछ त्रुटियां आती हैं।

WARNING: TestEngine with ID 'junit-jupiter' failed to discover tests
java.lang.NoSuchMethodError: org.junit.platform.engine.TestDescriptor.pruneTree()V

Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-vintage' failed to discover tests
java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;

Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-jupiter' failed to discover tests
java.lang.NoSuchMethodError: org.junit.platform.engine.TestDescriptor.pruneTree()V

Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-vintage' failed to discover tests
java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;

नोट: मैंने अभी तक कोई परीक्षण माइग्रेट नहीं किया है, सभी जूनिट 4 सिंटैक्स हैं।

38
LazerBanana 2 अगस्त 2017, 16:57

4 जवाब

सबसे बढ़िया उत्तर

विशिष्ट निर्भरताएँ जोड़ने से समस्या हल हो जाती है।

नोट: इंटेलीज को 2017 से ऊपर अपडेट करें।

OXYGEN यदि आप ग्रहण का उपयोग कर रहे हैं।


निर्भरता के नीचे Junit5 पैरामीट्रिज्ड परीक्षण सक्षम होते हैं जिनका उपयोग DataProvider के बजाय किया जा सकता है।

"org.junit.jupiter:junit-jupiter-params:5.0.0"
//for JUnit5 parametrized tests.

जूनिट5 एपीआई

"org.junit.jupiter:junit-jupiter-api:5.0.0"
//JUnit5 API

यदि आप सिंटैक्स और आयात को बदले बिना विरासती JUnit4 परीक्षण चलाना चाहते हैं, तो इसकी आवश्यकता है।

"org.junit.vintage:junit-vintage-engine:4:12.0"
//for legacy JUnit4 tests

संपादित करें: 07/2018 विंटेज रनर के संस्करण को बृहस्पति संस्करण से मिलाएं


यदि आप नए सिंटैक्स और आयात के साथ JUnit5 परीक्षण चलाना चाहते हैं तो इसकी आवश्यकता है।

"org.junit.jupiter:junit-jupiter-engine:5.0.0"
//for JUnit5 tests

java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;


लॉन्चर.

"org.junit.platform:junit-platform-launcher:1.0.0
//to handle default launcher

थ्रेड में अपवाद "मुख्य" java.lang.NoSuchMethodError: org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()Ljava/lang/ClassLoader;


अतिरिक्त जानकारी कैसे स्थापित करें JUnit5


ग्रैडल के संस्करण 4.6 के बाद से, अब प्लगइन्स की कोई आवश्यकता नहीं है ग्रैडल जूनिट5 का मूल रूप से समर्थन करता है: और विंटेज रनर का संस्करण अब जुनीट 5 संस्करण के समान है।

dependencies {

    testImplementation "org.junit.jupiter:junit-jupiter-params:$junitVersion"
    testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion"

    testRuntimeOnly "org.junit.vintage:junit-vintage-engine:$junitVersion"
    testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
}

test {  
    useJUnitPlatform {
        includeEngines 'junit-jupiter', 'junit-vintage'
    }
}
34
LazerBanana 31 अगस्त 2018, 13:56

मुझे जुनीट के संस्करण को 5.4.0 से 5.3.2 के लिए बदलना है और यह एक आकर्षण की तरह काम करता है।

16
André Machado 7 जून 2019, 13:12

एंड्रॉइड स्टूडियो के लिए यदि आप मुठभेड़ करते हैं

org.junit.jupiter:junit-jupiter-api . को हल करने में असमर्थ

अपनी फ़ाइल पर जाएँ ..\AndroidStudioProjects\Pets\app\build.gradle

निर्भरता अनुभाग में

कोड की इन दो पंक्तियों को इनपुट करें

 testImplementation 'junit:junit:4.12'
 androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.0.0-M4'
0
serv-inc 21 अक्टूबर 2018, 11:51

मैं जिस कॉन्फ़िगरेशन का उपयोग करता हूं वह नीचे है।

विंटेज इंजन निर्भरता केवल तभी आवश्यक है जब आप जूनिट 4 परीक्षणों का भी उपयोग कर रहे हों।

पैरामीटरयुक्त परीक्षणों का उपयोग करने पर ही बृहस्पति पैराम्स की आवश्यकता होती है।

<properties>
    <junit.version>5.0.0</junit.version>
</properties>
...
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.0.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>4.12.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
16
sweetfa 11 सितंबर 2017, 10:11