gpt4 book ai didi

scala sbt 测试在多个项目上运行一次设置和清理命令

转载 作者:行者123 更新时间:2023-11-28 19:50:21 25 4
gpt4 key购买 nike

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

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

我遇到的问题是,这是在每个项目的基础上完成的,然后为每个项目完成一次。因此,当我设置了一个多项目时,我在这种情况下启动了多个数据库(这会起作用,但意味着我必须为每个项目端口等进行配置)。

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

我认为唯一的方法是在设置和清理部分自己管理并发,因此保留一个全局计数器来检查它是第一个启动的还是最后一个被拆除的。

最佳答案

我在 sequencing tasks 上写了一篇博文,您可能会发现它很有用。

如果您想要聚合测试并确保事情按顺序进行,一种快速的方法是制作自定义命令。下面定义了一个名为 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 in ThisBuildstopTest in ThisBuild 的实现。通过在 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

关于scala sbt 测试在多个项目上运行一次设置和清理命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27343397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com