Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala sbt在多项目上一次性测试运行设置和清理命令_Scala_Testing_Sbt_Integration - Fatal编程技术网

scala 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()) ) 我的问题是,这是在每个项目的基础上完成的

我知道我可以通过修改测试选项在sbt中为测试阶段添加设置和清理代码,例如:

  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