2013-03-14 82 views
5

我需要在sbt中定義一個自定義測試配置,它運行測試,但有一些額外的設置。我一直在考慮如何去做,但我似乎無法做到。在sbt中定義自定義測試配置

我想要做的是這樣的:> test這將運行正常的測試任務,並> pipelinetest這將完全一樣的測試,只能用(javaOptions += "-Dpipeline.run=run"

我已經想通了如何設置測試javaOptions,就像這樣: javaOptions in test += "-Dpipeline.run=run"所以我想能夠做到的是:javaOptions in pipelinetest += "-Dpipeline.run=run"

我如何定義pipelinetest實現這一目標?這是否需要成爲一項新任務?或者這是否是test中的設置。我對此很陌生,目前對此非常困惑,閱讀文檔沒有幫助,所以任何幫助將不勝感激。

+2

請參閱http://www.scala-sbt.org/release/docs/Detailed-Topics/Testing.html,特別是有關其他測試配置和共享源的部分。 – 2013-03-18 18:31:09

回答

0

我只有部分答案,但我認爲這可能是有用的信息。我只是想爲Spark中的sbt構建做類似的事情 - 我想有一種方法來使用調試器來運行測試。馬克哈拉的評論指出了我的正確方向。該change I made was

lazy val TestDebug = config("testDebug") extend(Test) ... baseProject .configs(TestDebug) .settings(inConfig(TestDebug)(Defaults.testTasks): _*) .settings(Seq( javaOptions in TestDebug ++= "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" .split(" ").toSeq))

這讓我平時調用的testtestOnly,孤獨等,但現在我還可以運行testDebug:testOnly ...,它將使用上面定義的附加選項。 (它可能也創建了testDebug:test等與那些額外的選項,這是沒有用的,但哦)。

我真的不明白爲什麼,但我得到這個工作的一個重要組成部分是使用inConfig(TestDebug)(Defaults.testTasks),而不是inConfig(TestDebug)(Defaults.testSettings)

在我的情況下,我很難找出如何(a)讓它爲多項目構建工作,(b)我們的構建甚至是基於POM文件的b/c版本,這使得它成爲項目定義不同於每個示例。

像往常一樣,我與sbt的問題是,我發現信息似乎相關,但我的構建有一些不尋常的方面,使我無法完全貨物 - 邪教答案;儘管看起來我需要做些微小的修改,但沒有透徹理解,很難修改這些例子。