我有一个Play Framework 2.3项目,在其中我想将单元测试和功能测试分开,如下所示:
sbt test
应运行单元测试,并排除集成测试sbt it:test
应仅运行集成测试Scala文档建议使用project/Build.scala
,但我想使用build.sbt
和的组合project/Build.scala
,因此我的配置如下所示(我也尝试将所有配置都放入Build.scala
):
build.sbt
....
libraryDependencies ++= Seq(
"com.typesafe.play" %% "play-json" % "2.2.3",
"org.scalatest" %% "scalatest" % "2.1.5" % "it, test",
"org.mockito" % "mockito-all" % "1.9.5" % "it, test"
)
def funTestFilter(name: String): Boolean = ((name endsWith "ItTest") || (name endsWith "IntegrationTest"))
def unitTestFilter(name: String): Boolean = ((name endsWith "Test") && !funTestFilter(name))
testOptions in IntegrationTest := Seq(Tests.Filter(funTestFilter))
testOptions in Test := Seq(Tests.Filter(unitTestFilter))
项目/Build.scala
import sbt._
object Build extends Build {
lazy val root =
Project("root", file("."))
.configs( IntegrationTest )
.settings( Defaults.itSettings : _* )
}
在这种配置下,运行sbt test
会排除我的集成测试(以结尾IntegrationTest
),但运行sbt it:test
不会找到任何测试。
本文建议将文件放在特定的路径中,但我不知道Play项目的等效路径是什么。
使用标准源层次结构:
src/it/scala for Scala sources
src/it/java for Java sources
src/it/resources for resources that should go on the integration test classpath
第一个部分-有关在其中设置集成测试的build.sbt
问题将在另一个问题中描述。sbt 0.13.x中IntegrationTest配置的最小设置是什么?-归结为以下条目build.sbt
:
Defaults.itSettings
lazy val root = project.in(file(".")).configs(IntegrationTest)
由于Play项目的定义如下:
lazy val root = (project in file(".")).enablePlugins(PlayScala)
您应该添加configs
并完成。
lazy val root = project in file(".") enablePlugins(PlayScala) configs(IntegrationTest)
执行reload
或重新启动sbt / activator会话并执行it:test
。
[it-play] $ it:test
[info] Updating {file:/Users/jacek/sandbox/it-play/}root...
[info] Resolving jline#jline;2.11 ...
[info] Done updating.
[success] Total time: 1 s, completed Sep 13, 2014 7:12:27 PM
至于在集成测试应该在播放项目去的地方,简单的答案是这样做show it:sourceDirectory
的外壳,即src/it
用scala
,java
以及resources
下面的目录包含相应的来源。
在it
配置中添加测试框架库,即build.sbt
应该有类似的内容-注意it
配置:
"org.specs2" %% "specs2" % "2.4.2" % "it"
做reload
了SBT会话或重新启动,并it:test
应与Specs2测试下的所有测试工作src/it/scala
。
要缩小应该执行的测试的范围,请添加过滤器-确保Defaults.itSettings
顺序在行之后,因为顺序确实很重要,并且一个可以覆盖另一个:
val funTestFilter: String => Boolean = { name =>
(name endsWith "ItTest") || (name endsWith "IntegrationTest")
}
testOptions in IntegrationTest += Tests.Filter(funTestFilter)
执行reload
或重新启动sbt并执行it:test
。它应该工作。请执行以下操作show it:testOptions
以确保正确加载了设置:
[it-play] $ show it:testOptions
[info] List(Filter(<function1>))
build.sbt
对我有用的整个过程如下-它是由创建的activator new it-play play-scala
:
name := """it-play"""
version := "1.0-SNAPSHOT"
lazy val root = project in file(".") enablePlugins(PlayScala) configs(IntegrationTest)
scalaVersion := "2.11.1"
libraryDependencies ++= Seq(
jdbc,
anorm,
cache,
ws,
"org.specs2" %% "specs2" % "2.4.2" % "it"
)
Defaults.itSettings
val funTestFilter: String => Boolean = { name =>
(name endsWith "ItTest") || (name endsWith "IntegrationTest")
}
testOptions in IntegrationTest += Tests.Filter(funTestFilter)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句