使用Play / SBT进行自定义测试配置的javaOptions

时间:2013-10-30 07:16:34

标签: scala playframework sbt playframework-2.1 specs2

我正在使用Play Framework 2.1.x,并希望有两个测试配置一个用于小测试,另一个用于大型测试。大型测试需要具有自定义javaOptions值。我有以下配置,但似乎javaOptions设置没有被提取。

import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {

  val mySettings = Seq(...)

  val smallTestSettings = Defaults.testSettings ++ Seq(
    testOptions := Seq(Tests.Filter(smallTests))
  )

  val largeTestSettings = Defaults.testSettings ++ Seq(
    testOptions := Seq(Tests.Filter(largeTests)),
    javaOptions ++= Seq("-Dmysetting=1")  // <--- PROBLEM HERE
  )

  lazy val SmallTest = config("smalltest") extend(Test)
  lazy val LargeTest = config("largetest") extend(Test)

  val main = play.Project(appName, appVersion, appDependencies)
    .configs(SmallTest)
    .configs(LargeTest)
    .settings(mySettings: _*)
    .settings(inConfig(SmallTest)(smallTestSettings): _*)
    .settings(inConfig(LargeTest)(largeTestSettings): _*)
}

有趣的是,如果我将该行更改为:

    javaOptions in Test ++= Seq("-Dmysetting=1")

然后它会被大小测试所吸引。关于如何仅为大型测试配置设置此自定义javaOptions的任何想法?

1 个答案:

答案 0 :(得分:1)

  val largeTestSettings = Defaults.testSettings ++ Seq(
    testOptions := Seq(Tests.Filter(largeTests)),
    testOptions in LargeTest += Tests.Argument("-Dmysetting=1")
  )

我得到specs2测试只是为了读取属性,如果它们是用JUnitRunner注释的:

import org.junit.runner.RunWith
import org.specs2.mutable.Specification
import org.specs2.runner.JUnitRunner

@RunWith(classOf[JUnitRunner])
class LargeScalaTest extends Specification {
  "mysetting should be 1" in {
        System.getProperty("mysetting") must beEqualTo("1")
  }
}

我的测试项目位于GitHub的分支。