使用带有备用配置文件的Play 2.2.x的Jacoco4sbt

时间:2013-12-09 21:08:27

标签: scala playframework-2.0 sbt jacoco

我正在尝试使用Play Framework 2.2.1运行Jacoco4sbt。我可以让测试与Jacoco一起运行,但是它们失败了,因为它们不能用我的备用配置运行。即:

val main = play.Project(appName, appVersion, appDependencies, settings = jacoco_settings)
.settings(
 javaOptions in Test += "-Dconfig.file=conf/application.test.conf"
 , parallelExecution in jacoco.Config := false
)

正如Jacoco4sbt文档明确指出他们的维基:

  

但有一点需要注意:正如您可能已经注意到的,此插件在其自己的配置中工作,该配置基于测试配置。因此,您通常会在测试配置中定义的任何设置,您还必须在jacoco配置中定义插件才能按预期工作。

来源:https://github.com/sbt/jacoco4sbt/wiki

那么问题是如何将-Dconfig.file = JVM arg传递给Jacoco运行?没有它最终我的测试将无法正常运行,因为我正在使用测试配置文件来加载不同的全局类和数据库连接。

2 个答案:

答案 0 :(得分:3)

Nicolas的解决方案对我不起作用(Play 2.2.2)。它给了我语法错误。这是我的解决方案:

import de.johoop.jacoco4sbt._
import JacocoPlugin._

// Other settings

testOptions in jacoco.Config += Tests.Setup( () => System.setProperty("config.file", "conf/application.test.conf") )

parallelExecution in jacoco.Config := false

答案 1 :(得分:1)

除了jacoco.Config(默认配置)之外,还可以通过在Test(特定配置)上设置适当的值来解决有关特定配置的警告。

Play Framework在Test(特别是forkparallelExecution)中配置了一些选项,因此理论上您只需要将正确的配置复制到jacoco.Config

// WARNING: this does not work
val main = play.Project(appName, appVersion, appDependencies)
  .settings(jacoco_settings)
  .settings(Seq(
    javaOptions in Test += "-Dconfig.file=conf/application.test.conf",
    javaOptions in jacoco.Config  += "-Dconfig.file=conf/application.test.conf",
    fork in jacoco.Config := true,
    parallelExecution in jacoco.Config := false
  )

但正如BitBucket上Issue #14Issue #21所述,运行JaCoCo时无法在分叉模式下运行测试。 javaOptions仅用于分叉模式,因此您无法简单地配置javaOptions in jacoco.Config

替代方法包括在调用测试命令时设置属性:

play -Dconfig.file=conf/application-test.conf jacoco:cover

或者在测试设置期间设置属性:

val main = play.Project(appName, appVersion, appDependencies)
  .settings(jacoco_settings)
  .settings(Seq(
    javaOptions in Test += "-Dconfig.file=conf/application.test.conf",
    testOptions in jacoco.Config <+= Tests.Setup({ () => 
      System.setProperty("config.file", "webapp/conf/application.conf")
    }),
    parallelExecution in jacoco.Config := false
  )

当然,您也可以在没有JaCoCo的情况下以非分叉模式运行测试:

val main = play.Project(appName, appVersion, appDependencies)
  .settings(jacoco_settings)
  .settings(Seq(
    testOptions in Test <+= Tests.Setup({ () => 
      System.setProperty("config.file", "webapp/conf/application.conf")
    }),
    fork in Test := false,
    testOptions in jacoco.Config <+= Tests.Setup({ () => 
      System.setProperty("config.file", "webapp/conf/application.conf")
    }),
    parallelExecution in jacoco.Config := false
  )