我正在尝试使用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运行?没有它最终我的测试将无法正常运行,因为我正在使用测试配置文件来加载不同的全局类和数据库连接。
答案 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
(特别是fork
和parallelExecution
)中配置了一些选项,因此理论上您只需要将正确的配置复制到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 #14和Issue #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
)