2013-12-17 4 views
27

मैं अपने "परीक्षण" और "यह" एसबीटी में विन्यास के बीच एक सहायक विशेषता साझा करना चाहते हैं, लेकिन मैं समझ नहीं कैसे है।"इसे" (एकीकरण परीक्षण) कॉन्फ़िगरेशन में "परीक्षण" कक्षाएं कैसे उपलब्ध कराएं?

यहाँ एक न्यूनतम उदाहरण है:

परियोजना/Build.scala

import sbt._ 
import Keys._ 

object MyBuild extends Build { 

    val scalaTest = "org.scalatest" %% "scalatest" % "2.0" % "test,it" 

    lazy val myProject = 
    Project(id = "my-project", base = file(".")) 
     .configs(IntegrationTest) 
     .settings(Defaults.itSettings: _*) 
     .settings(
     scalaVersion := "2.10.3", 
     libraryDependencies ++= Seq(
      scalaTest 
     ) 
    ) 
} 

src/परीक्षण/स्केला/Helpers.scala

trait Helper { 
    def help() { println("helping.") } 
} 

src/परीक्षण /scala/TestSuite.scala

import org.scalatest._ 

class TestSuite extends FlatSpec with Matchers with Helper { 
    "My code" should "work" in { 
    help() 
    true should be(true) 
    } 
} 

src/यह/स्केला/ItSuite.scala

import org.scalatest._ 

class ItSuite extends FlatSpec with Matchers with Helper { 
    "My code" should "work" in { 
    help() 
    true should be(true) 
    } 
} 

तो, एसबीटी में, "परीक्षण" काम करता है:

sbt> test 
helping. 
[info] TestSuite: 
[info] My code 
[info] - should work 
[info] Run completed in 223 milliseconds. 
[info] Total number of tests run: 1 
[info] Suites: completed 1, aborted 0 
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0 
[info] All tests passed. 
[success] Total time: 0 s, completed Dec 17, 2013 1:54:56 AM 

लेकिन "यह: परीक्षण" नहीं है संकलन:

sbt> it:test 
[info] Compiling 1 Scala source to ./target/scala-2.10/it-classes... 
[error] ./src/it/scala/ItSuite.scala:3: not found: type Helper 
[error] class ItSuite extends FlatSpec with Matchers with Helper { 
[error]             ^
[error] ./src/it/scala/ItSuite.scala:5: not found: value help 
[error]  help() 
[error] ^
[error] two errors found 
[error] (it:compile) Compilation failed 
[error] Total time: 1 s, completed Dec 17, 2013 1:55:00 AM 

उत्तर

14

यदि आप से कोड साझा करना चाहते हैं Test कॉन्फ़िगरेशन, Test से कस्टम परीक्षण कॉन्फ़िगरेशन बनाना संभवतः बेहतर है। Custom test configuration देखें।

आपका project/Build.scala हो जाता है:

import sbt._ 
import Keys._ 

object MyBuild extends Build { 
    lazy val FunTest = config("fun") extend(Test) 

    val scalaTest = "org.scalatest" %% "scalatest" % "2.0" % "test" 

    lazy val myProject = 
    Project(id = "my-project", base = file(".")) 
     .configs(FunTest) 
     .settings(inConfig(FunTest)(Defaults.testSettings) : _*) 
     .settings(
     scalaVersion := "2.10.3", 
     libraryDependencies ++= Seq(
      scalaTest 
     ) 
    ) 
} 

इसके अलावा src/fun/ करने के लिए src/it/ नाम बदलें। अब fun:test काम करता है:

> fun:test 
helping. 
[info] ItSuite: 
[info] My code 
[info] - should work 
[info] Run completed in 245 milliseconds. 
[info] Total number of tests run: 1 
[info] Suites: completed 1, aborted 0 
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0 
[info] All tests passed. 
[success] Total time: 1 s, completed Dec 17, 2013 8:43:17 AM 
+0

उचित लगता है। धन्यवाद! –

+0

@ यूजीन योकोटा ऐसी कस्टम कॉन्फ़िगरेशन का उपयोग करते समय केवल विशिष्ट टेस्ट सूइट (टेस्ट क्लास) चलाने के लिए दूर है? की कोशिश की 'मज़ा: कोई भाग्य – 3Gee

12

आप अपने प्रोजेक्ट क्रम विन्यास (डिफ़ॉल्ट) के बजाय टेस्ट विन्यास का विस्तार करने में IntegrationTest विन्यास को फिर से परिभाषित कर सकते हैं। यह आपके परीक्षण कॉन्फ़िगरेशन में आपके इंटीग्रेशन टेस्ट कॉन्फ़िगरेशन में सबकुछ उपलब्ध कराएगा।

import sbt._ 
import Keys._ 

object MyBuild extends Build { 

    val scalaTest = "org.scalatest" %% "scalatest" % "2.0" % "test,it" 

    lazy val IntegrationTest = config("it") extend(Test) 

    lazy val myProject = 
    Project(id = "my-project", base = file(".")) 
     .configs(IntegrationTest) 
     .settings(Defaults.itSettings: _*) 
     .settings(
     scalaVersion := "2.10.3", 
     libraryDependencies ++= Seq(
      scalaTest 
     ) 
    ) 
} 
+0

साथ testOnly * MySpecialSuit' अगर मैं कि, वहाँ नहीं अजीब अगर निर्माण config के किसी अन्य भाग में देखता छाया 'असली'' IntegrationTest' गुप्त gotchas रहे हैं? –

+3

अगर आप कहीं और गुंजाइश में दोनों खींच संकलन नहीं हो सकता है, लेकिन फिर भी यदि आप गलत एक का चयन स्पष्ट रूप से वह आंतरिक रूप से दोनों कॉन्फ़िगरेशन बाध्य करने के लिए "यह" और मुझे लगता है कि क्या वास्तव में मायने रखती है के रूप में ही विन्यास अंतरिक्ष के लिए समाधान हो जाना चाहिए। (यदि आप चाहें तो आप इसे हमेशा MyIntegrationTest पर बदल सकते हैं।) – Caoilte

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