编辑4横向规则下面的大多数文本与真正的问题没有任何关系.一开始我觉得分叉是问题所在,但事实并非如此.
我正在尝试运行聚合子项目的所有测试.在子项目中的所有测试之前,应该运行设置方法,并且在子项目中的测试之后,应该运行清理方法.
在为聚合项目运行测试任务时,我期望以下顺序
但顺序是:
可以在此处找到具有此行为的构建脚本.
如何解决此问题以获得我预期的序列?
我正在使用分叉在我的子项目中运行测试.对于每个子项目,mongo db在测试之前启动并在测试之后停止.
一个项目内的测试按顺序进行; 如果我为一个项目运行测试,这很有效.
但是如果我运行项目根的任务测试(包含子项目的聚合),我希望分叉的jvms按顺序启动,即
但看起来jvms是并行启动的; 这不是我想要的.
我尝试了以下(根据文档,应该已经设置为1):
concurrentRestrictions in Test := Seq(
Tags.limit(Tags.ForkedTestGroup, 1)
)
Run Code Online (Sandbox Code Playgroud)
但它没有用.在启动测试任务后,直接从我的安装方法打印以下内容(在打印任何测试日志之前):
startupDb, thread name = pool-4-thread-5
startupDb, thread name = pool-4-thread-7
startupDb, thread name = pool-4-thread-2
startupDb, thread name = pool-4-thread-6
startupDb, thread name = pool-4-thread-8
startupDb, thread name = pool-4-thread-3
startupDb, thread name = pool-4-thread-9
Run Code Online (Sandbox Code Playgroud)
这些是我的测试相关设置:
parallelExecution in Test := false,
testOptions in Test += Tests.Setup( () => MongoTest.startupDb() ),
testOptions in Test += Tests.Cleanup( () => MongoTest.shutdownDb() ),
fork in Test := true,
concurrentRestrictions in Test := Seq(
Tags.limit(Tags.ForkedTestGroup, 1)
)
Run Code Online (Sandbox Code Playgroud)
使用分叉对我来说很重要,但是如上所述.
我在Windows 7上使用sbt 0.13.0.
编辑我创建了一个带有示例构建的要点.
EDIT2在文档中说:
通过设置Tags.ForkedTestGroup标记的限制来控制允许同时运行的分叉JVM的数量,默认为1
所以这应该在理论上有效.这是一个错误吗?如果没有,我怎么能设法做到这一点?
EDIT3看起来分叉不是问题.问题是为所有子项目立即调用设置方法.
小智 8
嗯.琐碎的答案转换为评论.听起来你问的是在另一个问题中得到解决的同一个问题(见评论).答案似乎是
parallelExecution in ThisBuild := false
Run Code Online (Sandbox Code Playgroud)
我找到了另一篇建议的博文
parallelExecution in Global := false
Run Code Online (Sandbox Code Playgroud)
是答案."全局"答案还表明,会关闭编译等并行执行,但这可能不如运行测试重要.
从 sbt 0.12 开始,您可以使用以下设置使所有子项目中的所有测试任务串行运行:
concurrentRestrictions in Global += Tags.limit(Tags.Test, 1)
Run Code Online (Sandbox Code Playgroud)
(Tags.Test
是所有测试任务的内置语义标签)。
请参阅SBT 手册中的并行执行。