2015-02-18 5 views
15

मुझे जुनीट और स्कैलास्ट परीक्षण दोनों के साथ मिश्रित जावा/स्कैला प्रोजेक्ट मिला है। scalatest plugin के साथ, ग्रैडल src/test/scala में स्कैलाटेस्ट परीक्षण चलाता है, लेकिन src/test/java में जुनीट परीक्षणों को अनदेखा करता है। प्लगइन के बिना, ग्रैडल जुनीट परीक्षण चलाता है लेकिन स्कैला को अनदेखा करता है। मुझे क्या चाल है?मैं ग्रैडल के साथ स्कैलास्ट और जुनीट परीक्षण दोनों कैसे चला सकता हूं?

मेरे build.gradle:

plugins { 
    id 'java' 
    id 'maven' 
    id 'scala' 
    id "com.github.maiflai.scalatest" version "0.6-5-g9065d91" 
} 

sourceCompatibility = 1.8 

group = 'org.chrononaut' 
version = '1.0-SNAPSHOT' 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.3' 
} 

ext { 
    scalaMajorVersion = '2.11' 
    scalaVersion = "${scalaMajorVersion}.5" 
} 

repositories { 
    mavenCentral() 
    mavenLocal() 
} 

dependencies { 
    compile "org.scala-lang:scala-library:${scalaVersion}" 
    compile "org.scala-lang.modules:scala-xml_${scalaMajorVersion}:1.0.3" 
    compile 'com.google.guava:guava:18.0' 
    compile 'javax.xml.bind:jaxb-api:2.2.12' 
    compile 'jaxen:jaxen:1.1.6' 
    compile 'joda-time:joda-time:2.7' 
    compile 'org.joda:joda-convert:1.7' 
    compile 'org.apache.commons:commons-lang3:3.3.2' 
    compile 'org.jdom:jdom2:2.0.5' 

    testCompile 'junit:junit:4.12' 
    testCompile 'org.easytesting:fest-assert:1.4' 
    testCompile 'org.mockito:mockito-core:1.10.19' 
    testCompile "org.scalatest:scalatest_${scalaMajorVersion}:2.2.4" 
    testRuntime 'org.pegdown:pegdown:1.1.0' // required by scalatest plugin 
} 

compileScala { 
    scalaCompileOptions.additionalParameters = [ 
      "-feature", 
      "-language:reflectiveCalls", // used for config structural typing 
      "-language:postfixOps" 
    ] 
} 

ईटीए: मैं जानता हूँ कि यह स्काला JUnit परीक्षण धावक के साथ चलाने के लिए उन्हें मजबूर करने के लिए परीक्षण पर टिप्पणी करना संभव है। मैं एक-स्टॉप build.gradle समाधान ढूंढ रहा हूं जिसके लिए प्रत्येक टेस्ट फ़ाइल को संपादित करने की आवश्यकता नहीं है (या सामान्य रूप से बिल्ड सिस्टम में सीमाओं को प्राप्त करने के लिए परीक्षणों के साथ गड़बड़ करना)।

+0

अगर आप com.github को दूर तो क्या होता है। maiflai.scalatest और यह क्या ठीक करता है? – judoole

+0

अगर मैं com.github.maiflai.scalatest को हटा देता हूं तो स्कैला परीक्षण नहीं चलते हैं, केवल जुनीट वाले (मूल पोस्ट देखें)। –

+0

शायद यदि आप स्कालास्ट्स को ग्रैडल के साथ चलाने के लिए इस पर थप्पड़ मारते हैं: @RunWith (classOf [org.scalatest.junit.JUnitRunner]) – judoole

उत्तर

8
  1. प्लगइन से छुटकारा पाएं, क्योंकि यह केवल स्कैलास्ट को चलाने के लिए परीक्षण कार्य करता है (इसलिए जुनीट को अनदेखा किया जाता है)।
  2. @RunWith(classOf[JUnitRunner]) के साथ अपने स्कैलास्टेट्स को एनोटेट करें ताकि वे जेनिट परीक्षण के रूप में धीरे-धीरे चल सकें।
+0

मुझे उस विकल्प से अवगत है (और टिप्पणियों में भी सुझाव दिया गया था), लेकिन मुझे नहीं लगता कि मुझे यह काम करने के लिए हर टेस्ट फ़ाइल को संपादित करना होगा। –

+2

फिर आपको अपना निर्माण बढ़ाएं और एक नया कार्य जोड़ें (उदा। 'ScalaTest.mustRunAfter test') और हुड के नीचे चींटी कार्य को नियोजित करें। कुछ https://issues.gradle.org/browse/GRADLE-2659 जैसा है। इस तरह 'ग्रेडल चेक' दोनों जुनीट परीक्षण और स्कैलास्ट्स चलाएगा। – Piohen

10

JUnit के साथ चलाने के लिए (और एक चींटी कार्य के रूप में टिप्पणी में सुझाव बनाने के लिए) एक अन्य विकल्प - कि ScalaTest के धावक सीधे चलाता है एक काम पैदा कर रही है:

task scalaTest(dependsOn: ['testClasses'], type: JavaExec) { 
    main = 'org.scalatest.tools.Runner' 
    args = ['-R', 'build/classes/test', '-o'] 
    classpath = sourceSets.test.runtimeClasspath 
} 

test.dependsOn scalaTest // so that running "test" would run this first, then the JUnit tests 
संबंधित मुद्दे

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