scala sbt test在多个项目上运行setup和cleanup命令

Elm*_*ber 5 testing integration scala sbt

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

  val embedMongoTestSettings: Seq[Setting[_]] = Seq(
    testOptions in Test += Tests.Setup( () => createMongod()),
    testOptions in Test += Tests.Cleanup( () => destroyMongod())
  )
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,这是基于每个项目完成的,然后为每个项目完成一次.因此,当我设置一个多项目时,我会在这种情况下启动几个数据库(这可以工作,但这意味着我必须配置每个项目端口等).

在sbt中是否有一种方法可以确保某些步骤每个测试阶段只运行一次,无论是针对多个项目,一个项目还是一个测试用例?

我想的唯一方法是在设置和清理部分中自己管理并发,因此请保留一个全局计数器,以检查它是第一个开始还是最后一个被拆除.

Eug*_*ota 2

我写了一篇关于排序任务的博客文章,您可能会发现它很有用。

如果您想聚合测试并确保事情按顺序进行,一种快速的方法是创建自定义命令。下面定义了一个名为 的命令别名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
  )
Run Code Online (Sandbox Code Playgroud)

您可以根据需要替换startTest in ThisBuild和的实现。stopTest in ThisBuild通过在级别定义这些设置ThisBuildsts命令应该在根级别以及单个子项目级别上工作。

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
Run Code Online (Sandbox Code Playgroud)