2017-06-08 22 views
15

मैं जुनीट 4 परीक्षण चलाने में सफल होने के बाद ग्रैंडल के साथ जुनीट 5 का उपयोग करने की कोशिश कर रहा हूं।ग्रैडल के साथ जुनीट 5 का उपयोग कैसे करें?

अपेक्षित परिणाम: टीथ जुनीट 4 टेस्ट ने आउटपुट में एक अच्छा 'पास' दिया और build/reports/tests में एक HTML रिपोर्ट दी।

वास्तविक परिणाम: के रूप में नीचे JUnit 5 परीक्षण (...) build succesful के अलावा नहीं उत्पादन कुछ भी करता है, जबकि मैं जानता हूँ कि परीक्षण वास्तव में नहीं चला जाता है के बाद से वहाँ कोई परीक्षण लॉग उत्पादन पारित कर दिया है/छोड़ दिया/विफल रहा है, और में एक fail डाल परीक्षण सफल बनाता है।

gradle test --info चल रहा है Skipping task ':testClasses' as it has no actions. में से अधिकांश मुझे लगता है कि ज्यादातर अप्रासंगिक आउटपुट। आश्चर्यजनक रूप से, यह Executing task ':test' और Generating HTML test report... Finished generating test html results और build/test-results/test में xml के समान है, जबकि xml उत्पन्न नहीं होता है, एचटीएमएल कोई परीक्षण नहीं दिखाता है और कोई त्रुटि नहीं होती है, और परीक्षण वास्तव में नहीं चल रहा है।

क्या मैं भी बहुत दिलचस्प लगता है, कि gradle test --debug पैदावार

[TestEventLogger] Gradle Test Run :test STARTED 
[org.gradle.api.internal.tasks.testing.junit.JUnitDetector] test-class- 
scan : failed to scan parent class java/lang/Object, could not find the class file 
[TestEventLogger] 
[TestEventLogger] Gradle Test Run :test PASSED 

जबकि मेरी केवल परीक्षण

fail("test fails"); 

जो मुझे लगता है कि बहुत ही अजीब होता है!

मेरे निर्माण फ़ाइल

apply plugin: 'java' 

test { 
    dependsOn 'cleanTest' // run tests every time 

} 

sourceSets { 
    main { 
     java { 
      srcDirs 'src' 
     } 
    } 
    test { 
     java { 
      srcDirs 'test' 
     } 
    } 
} 

repositories { 
    mavenCentral() 
} 

dependencies { 
    // when using this, it worked with a junit 4 test 
// testCompile 'junit:junit:4.10' 
    // this should be needed for junit 5 (using M4 is required since IJ 2017.1.2 
    testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0-M4") 
} 

test { 
    testLogging { 
     events "passed", "skipped", "failed" 
    } 
} 

मेरा परीक्षण है

package mypackage; 

import org.junit.jupiter.api.Test; 
import static org.junit.jupiter.api.Assertions.assertEquals; 

public class HelloWorldTest { 
    @Test 
    public void testHelloWorld(){ 
     assertEquals(2, 1+1, "message"); 
    } 
} 

मेरे फ़ोल्डर संरचना है, पैकेज mypackage,

java-template-project 
--- src 
    --- mypackage 
     --- HelloWorld.java 
--- test 
    --- mypackage 
     --- HelloWorldTest.java 

और इंटेलीजे 2017/01/03, में का उपयोग कर जो मैं मैं उपयोग कर रहा हूं, मॉड्यूल संरचना इस तरह दिखती है

java-template-project 
--- java-template-project_main 
    --- src/mypackage 
     --- HelloWorld(.java) 
--- java-template-project_test 
    --- test/mypackage 
     --- HelloWorldTest(.java) 

क्योंकि आजकल ग्राडल अपने पैकेज में स्रोत और परीक्षण चाहता है।

मैं

क्या करने की कोशिश की जाहिर है इस इस विषय के बारे पहला सवाल नहीं है, सभी प्रासंगिक सवाल मैंने पाया

  • Gradle project running jUnit 5 tests in IntelliJ

    हैं लेकिन जैसा कि आप देख सकते हैं कि यह है इंटेलिजे के पुराने संस्करणों के लिए, और मैं पहले से ही आईजे 2016.3.3 के लिए सिंटैक्स का उपयोग कर रहा हूं और उत्तर में से एक के अनुसार, एक जुनीट निर्भरता रेखा में, इसलिए यह ठीक होना चाहिए।

  • Upgrade from JUnit 4 to JUnit 5 in intellij with gradle

    लिंक वापस ऊपर सवाल का, और इस Jetbrains blog जो ऊपर प्रश्न के रूप में एक ही पंक्ति का उपयोग करता है करने के लिए लिंक।इसके अलावा के लिए लिंक: निर्भरता के रूप में,,

  • Integrate JUnit 5 tests results with Intellij test report यह एक शो सवाल में भी

    testRuntime("org.junit.vintage:junit-vintage-engine:5.0.0-M1") 
    

    जिसमें Why were JUnit Jupiter and JUnit Vintage separated When I Running TestCase in IntelliJ? खैर समझाया गया है, जब मैं यह भाग गया, उत्पादन से पता चला है यह नहीं मिल सका इस संस्करण लेकिन Maven Repository यह एक JUnit 5 के लिए है के अनुसार:

    testRuntime("org.junit.vintage:junit-vintage-engine:4.12.0-M4") 
    

    वहाँ जवाब है कि आप बस एल के बाद से इंटेलीजे भीतर परीक्षण चलाने की अनुमति आर्ट संस्करणों में जुनीट 5 का समर्थन है। मुझे पता है, और जब मैं IntelliJ के भीतर से चलाता हूं तो परीक्षण ठीक चलता है। लेकिन मैं ग्रैडल (और ट्रैविस, जिसे निर्भरता प्रबंधन की आवश्यकता है) का उपयोग करना चाहता हूं।

  • How to capture stdout/stderr in junit 5 gradle test report?

    मैं

    testCompile("org.junit.platform:junit-platform-gradle-plugin:1.0.0-M3") 
    testCompile("org.junit.jupiter:junit-jupiter-engine:5.0.0-M3") 
    

    उपयोग करने की कोशिश लेकिन परिणाम नहीं बदला।

    मेरा टेम्पलेट प्रोजेक्ट https://github.com/PHPirates/java-template-project पर स्थित है लेकिन इस प्रश्न में सभी जानकारी आवश्यक होनी चाहिए।

+0

एक ही मुद्दा था। पता चला कि @ org.junit' (Junit4 @Test) की बजाय @Test को 'org.junit.jupiter.api' (Junit5 @Test) से आयात किया जाना चाहिए। – yname

उत्तर

13

आपको जुनीट संस्करण दोनों के लिए इंजन की आवश्यकता है, और आपको जुनीट प्लेटफ़ॉर्म ग्रेडल प्लगइन को लागू करने की आवश्यकता है। मैं आपकी ग्रेडल फ़ाइल में नहीं देखता हूं।

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath ("org.junit.platform:junit-platform-gradle-plugin:1.0.0-M4") 
    } 
} 

apply plugin: 'org.junit.platform.gradle.plugin' 
... 

dependencies { 
... 
    testCompile("junit:junit:4.12") 
    testRuntime("org.junit.vintage:junit-vintage-engine:4.12.0-M4") 

    testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0-M4") 
    testRuntime("org.junit.jupiter:junit-jupiter-engine:5.0.0-M4") 

    // Enable use of the JUnitPlatform Runner within the IDE 
    testCompile("org.junit.platform:junit-platform-runner:1.0.0-M4") 
} 

junitPlatform { 
    details 'tree' 
} 

उस पर JUnit doc रूप में अधिक जानकारी देखें: यहाँ एक काम Gradle निर्माण दोनों JUnit 4 और 5 को क्रियान्वित है।

2

कारण GitHub issue के लिए अंतर्निहित समर्थन JUnit 5, Gradle 4.6

के लिए अनुसूचित के लिए इस प्रकार Gradle 4.6 अपने अपेक्षित परिणाम के बाद से वास्तविक परिणाम के रूप में एक ही रहना होगा।

अपेक्षित परिणाम: Tthe JUnit 4 परीक्षण एक अच्छा उत्पादन और build/reports/tests में एक HTML रिपोर्ट में 'उत्तीर्ण' दे दी है।

युपीडी:

Gradle 4.6-rc-1 फरवरी 2018 की 16 तारीख को जारी किया गया था और इस संस्करण में निर्मित JUnit 5.

के लिए समर्थन सक्षम करने के लिए JUnit 5 समर्थन आप की जरूरत है प्रदान करता है Gradle आवरण अद्यतन:

gradle wrapper --gradle-version=4.6-rc-1 

और build.gradle सिर्फ एक पंक्ति जोड़ें:

test { 
    useJUnitPlatform() 
} 
4

नई: Gradle 4.6

में JUnit 5 समर्थन

रूप Gradle से here ने बताया 4.6-rc-1 के बाद JUnit 5 समर्थित है! 4.6-आरसी -2 (वर्तमान में नवीनतम) के आधिकारिक रिलीज नोट here।पुराना सेटअप अभी भी काम करेगा, लेकिन इसका उपयोग करके बिल्ड फ़ाइल को बहुत क्लीनर बनाता है।

अद्यतन Gradle

सबसे पहले, सुनिश्चित करें कि आप नवीनतम Gradle संस्करण का उपयोग कर रहे हैं, नवीनतम रिलीज़ here जाँच कर सकते हैं। यदि यह उदाहरण के लिए 4.6-आरसी -2 है, तो अपने प्रोजेक्ट स्थान gradlew wrapper --gradle-version=4.6-rc-2 में टर्मिनल में चलाएं या इस लाइन को अपने gradle/wrapper/gradle-wrapper.properties फ़ाइल में अपडेट करना सुनिश्चित करें: distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-rc-2-all.zip

का उपयोग कैसे करें निर्मित JUnit 5

जावा फ़ाइलें, निर्देशिका संरचना आदि प्रश्न build.gradle फ़ाइल हो जाएगा से साथ

तब (नई plugins ब्लॉक का उपयोग)

plugins { 
    id 'java' 
} 

description = """ 
Gradle build file. 
This uses the gradle wrapper, so when running (the first time) use 'gradlew test' so then it 
downloads the right gradle automatically. 
""" 

repositories { 
    mavenCentral() 
    mavenLocal() 
} 

dependencies { 
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.0.3' 
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.0.3' 
} 

sourceSets { 
    main.java.srcDirs += 'src' 
    main.resources.srcDirs += 'src' 
    test.java.srcDirs += 'test' 
    test.resources.srcDirs += 'test' 
} 

// Java target version 
sourceCompatibility = 1.8 

test { 
    // Enable JUnit 5 (Gradle 4.6+). 
    useJUnitPlatform() 

    // Always run tests, even when nothing changed. 
    dependsOn 'cleanTest' 

    // Show test results. 
    testLogging { 
     events "passed", "skipped", "failed" 
    } 
} 
संबंधित मुद्दे

 संबंधित मुद्दे