如何将Spock与Play 2.6及sbt 0.13集成?sbt无法识别Groovy测试文件
解决Play 2.6 + sbt 0.13 集成Spock测试的问题
我太懂你这种头疼的感觉了——IntelliJ里JUnit能顺顺当当跑Spock测试,到sbt这儿就完全没反应,连Groovy文件都没加载上,旧的sbt-groovy插件还早就过时用不了。别愁,咱们不用依赖那个废弃插件,手动配置sbt就能搞定,试试下面的步骤:
1. 补上必要的依赖
先在你的build.sbt里添加Groovy和Spock的测试依赖,注意版本要匹配好:
libraryDependencies ++= Seq( // 适配Spock 1.3的Groovy版本,可根据需求微调 "org.codehaus.groovy" % "groovy-all" % "2.5.14" % Test, // Spock核心依赖,和上面的Groovy版本对应 "org.spockframework" % "spock-core" % "1.3-groovy-2.5" % Test, // 保持和你的Play 2.6版本一致 "com.typesafe.play" %% "play-test" % "2.6.25" % Test )
2. 让sbt认出Groovy测试文件
默认sbt只会扫描Java/Scala测试文件,咱们得明确告诉它去读Groovy文件的目录。在build.sbt里加上:
// 指定Groovy测试文件的存放目录,Play项目默认测试根目录是test/,按需调整 unmanagedSourceDirectories in Test += baseDirectory.value / "src" / "test" / "groovy" // 如果你的测试文件直接放在test/groovy下,就用这个: // sourceDirectories in Test += (baseDirectory.value / "test" / "groovy")
3. 配置sbt使用Spock测试框架
最后让sbt知道要用Spock来执行测试,在build.sbt里添加:
// 注册Spock测试框架 testFrameworks += new TestFramework("org.spockframework.runtime.SpockFramework") // 可选:添加参数让测试输出更详细,方便排查问题 testOptions in Test += Tests.Argument(TestFrameworks.Spock, "-v")
额外提醒
- 测试文件命名尽量符合Spock规范,以
Spec结尾,比如UserServiceSpec.groovy,这样sbt更容易识别 - 务必保证Groovy和Spock版本兼容:Spock 1.3对应Groovy 2.5.x,Spock 2.x对应Groovy 3.x,Play 2.6用Spock 1.3会更稳妥
- 运行
sbt test后,留意控制台输出,如果还是没加载Groovy文件,检查源目录配置的路径是否和实际文件位置一致
这样配置完,sbt应该就能正常识别并运行你的Spock测试了!
内容的提问来源于stack exchange,提问作者Adarsh Singh
相关产品推荐
相关产品推荐

