scala sbt在多项目上一次性测试运行设置和清理命令
我知道我可以通过修改测试选项在sbt中为测试阶段添加设置和清理代码,例如:scala sbt在多项目上一次性测试运行设置和清理命令,scala,testing,sbt,integration,Scala,Testing,Sbt,Integration,我知道我可以通过修改测试选项在sbt中为测试阶段添加设置和清理代码,例如: val embedMongoTestSettings: Seq[Setting[_]] = Seq( testOptions in Test += Tests.Setup( () => createMongod()), testOptions in Test += Tests.Cleanup( () => destroyMongod()) ) 我的问题是,这是在每个项目的基础上完成的
val embedMongoTestSettings: Seq[Setting[_]] = Seq(
testOptions in Test += Tests.Setup( () => createMongod()),
testOptions in Test += Tests.Cleanup( () => destroyMongod())
)
我的问题是,这是在每个项目的基础上完成的,然后每个项目做一次。因此,当我设置了一个多项目时,我会在这种情况下启动多个数据库(这会起作用,但意味着我必须配置每个项目的端口,等等)
在sbt中是否有一种方法可以确保每个测试阶段只运行一次特定的步骤,无论是针对多个项目、一个项目还是单个测试用例
我认为唯一的办法是自己在设置和清理部分管理并发性,所以保留一个全局计数器,检查它是第一个启动的还是最后一个被拆除的。我写了一篇博客文章,你可能会发现它很有用
如果您想聚合测试并确保事情按顺序进行,一种快速的方法是生成一个自定义命令。下面定义了名为sts
的命令别名:
lazy val commonSettings = Seq(
scalaVersion := "2.11.4"
)
lazy val specs2Core = "org.specs2" %% "specs2-core" % "2.4.15"
val startTest = taskKey[Unit]("start test")
val stopTest = taskKey[Unit]("stop test")
lazy val root = (project in file(".")).
aggregate(app, webapp).
settings(commonSettings: _*).
settings(addCommandAlias("sts", ";startTest;test;stopTest"): _*).
settings(
startTest in ThisBuild := {
println("starting server...")
Thread.sleep(500)
},
stopTest in ThisBuild := {
println("stopping server...")
Thread.sleep(500)
}
)
lazy val app = (project in file("app")).
settings(commonSettings: _*).
settings(
libraryDependencies += specs2Core % Test
)
lazy val webapp = (project in file("webapp")).
settings(commonSettings: _*).
settings(
libraryDependencies += specs2Core % Test
)
您可以随意替换此构建中的startTest
和stopTest的实现。
通过在ThisBuild
级别定义这些设置,sts
命令应该在根级别和单个子项目级别都能工作
root> sts
starting server...
[success] Total time: 1 s, completed Jan 13, 2015 5:20:58 PM
[info] HelloWorldSpec
....
[info] Passed: Total 3, Failed 0, Errors 0, Passed 3
[success] Total time: 1 s, completed Jan 13, 2015 5:20:59 PM
stopping server...
[success] Total time: 1 s, completed Jan 13, 2015 5:20:59 PM
root> project app
[info] Set current project to app
app> sts
starting server...
[success] Total time: 1 s, completed Jan 13, 2015 5:21:15 PM
[info] HelloWorldSpec
....
[info] Passed: Total 3, Failed 0, Errors 0, Passed 3
[success] Total time: 1 s, completed Jan 13, 2015 5:21:16 PM
stopping server...
[success] Total time: 1 s, completed Jan 13, 2015 5:21:16 PM