2012-10-25 51 views
12

我有一個玩! 2 for Scala應用程序,我正在使用Specs2進行測試。我可以使用test命令或使用test-only MyParticularSpec的特定規格運行所有測試。玩!框架:自定義哪些測試運行

我希望做的是紀念一些特殊規格,甚至是規範內部單一方法,爲了做這樣的事情:

  • 運行不集成所有的測試(即,做不能訪問外部資源)
  • 運行不寫模式訪問外部資源的所有測試(但仍在運行的閱讀測試)
  • 運行的所有測試,但給定一個

等。

我想這應該是可行的,也許通過添加一些註釋,但我不知道如何去做。

是否存在選擇性運行某些測試而不是其他測試的機制?

編輯我一直在使用test-only當回答自己。仍然命令行選項不適用於test任務。繼sbt guide我試圖創建一個額外的SBT的配置,像

object ApplicationBuild extends Build { 
    // more settings 
    lazy val UnitTest = config("unit") extend(Test) 
    lazy val specs = "org.scala-tools.testing" %% "specs" % "1.6.9" % "unit" 

    val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA) 
    .configs(UnitTest) 
    .settings(inConfig(UnitTest)(Defaults.testTasks) : _*) 
    .settings(
     testOptions in UnitTest += Tests.Argument("exclude integration"), 
     libraryDependencies += specs 
    ) 
} 

當我通過參數沒有選項,例如,當我把Test.Argument("plan")這工作。但我無法找到如何傳遞更復雜的論點。我試過

Tests.Argument("exclude integration") 
Tests.Argument("exclude=integration") 
Tests.Argument("-exclude integration") 
Tests.Argument("-exclude=integration") 
Tests.Argument("exclude", "integration") 
Tests.Argument("exclude \"integration\"") 

並且可能更多。仍然沒有任何線索什麼是正確的語法。

有誰知道如何從sbt向specs2傳遞選項參數?

回答

4

如果你想通過幾個argum經濟需求,你可以添加多個字符串到一個Test.Argument

testOptions in Test += Tests.Argument("include", "unit") 

有該specs2用戶指南here和播放文件there在這方面的例子。

+0

非常感謝您!在文檔中沒有解釋清楚的是,在這裏我們有一個參數(排除)和一些選項(排除什麼),並且不清楚是否應該像單獨的arugments一樣通過它。其實,我試過這個('Tests.Argument(「exclude」,「integration」)'),但是id不起作用。我現在發現問題不在於這個聲明,而在於我在spec(「something」應該是{tag(「integration」)...')的開頭聲明標記,而不是單一的fragemnt。我會嘗試找出哪些不適用於此。 – Andrea

+0

我也使用'section'調用解決了這個問題,所以現在一切正常。再次感謝你! :-) – Andrea

+0

好。我修改了下一版specs2的文檔:http://etorreborre.github.com/specs2/guide-SNAPSHOT/guide/org.specs2.guide.Runners.html#with+sbt+%3E+0.9.x – Eric

7

首先,以下the specs2 guide必須添加標籤的規格,這樣

class MySpec extends Specification with Tags { 
    "My spec" should { 
    "exclude this test" in { 
     true 
    } tag ("foo") 

    "include this one" in { 
     true 
    } 
    } 
} 

命令行參數以包括都記錄here

然後可以選擇性地包括或與

排除試驗
test-only MySpec -- exclude foo 
test-only MySpec -- include foo 
4

您還可以使用沒有任何變化到您的構建

test-only * -- exclude integration 

在播放2.1 RC3測試

0

我碰到這個問題就來了,而試圖找出如何做同樣的事情與播放ScalaTest 。 SBT有關於如何配置additional test configurations的詳細文檔,但這些可能會對Play進行一些調整。

除了微妙的不同的項目配置,我發現我想從一批PlaySettings嬰兒牀測試設置。以下內容正在運行並在「/it」目錄中生成帶有集成測試源的Intellij項目。我可能還是會丟失報告和生命週期掛鉤,

object BuildSettings { 
    def testSettings = { 
    // required for ScalaTest. See http://stackoverflow.com/questions/10362388/using-scalatest-in-a-playframework-project 
    testOptions in Test := Nil 
    } 

    def itSettings = { 
    // variously cribbed from https://github.com/playframework/Play20/blob/master/framework/src/sbt-plugin/src/main/scala/PlaySettings.scala 
    sourceDirectory in IntegrationTest <<= baseDirectory/"it" 
    scalaSource in Test <<= baseDirectory/"it" 
    libraryDependencies += "play" %% "play-test" % play.core.PlayVersion.current % "it" 
    } 
} 

object ApplicationBuild extends Build { 
    val main = play.Project(
    appName, 
    appVersion, 
    Dependencies.dependencies) 
    .configs(IntegrationTest) 
    .settings(Dependencies.resolutionRepos) 
    .settings(BuildSettings.testSettings) 
    .settings(Defaults.itSettings : _*) 
    .settings(BuildSettings.itSettings) 
} 
2

我使用Play2.2,並有2種方式來做到這一點取決於你是否是在玩控制檯。

  1. 從控制檯類型:test-only full.namespace.to.TestSpec
  2. 從終端類型:test-only "full.namespace.to.TestSpec"