我玩了! 2用于Scala应用程序,我使用Specs2进行测试。我可以使用test
命令或test-only MyParticularSpec
的特定规范运行所有测试。
我想做的是在规范中标记一些特定的规范,甚至是单个方法,以便执行以下操作:
等等。
我想这样的事情应该是可行的,也许是通过添加一些注释,但我不知道该怎么做。
是否存在选择性运行某些测试而不是其他测试的机制?
编辑我在使用test-only
时已经回答了问题。命令行选项仍然不适用于test
任务。在sbt guide之后我试图创建一个额外的sbt配置,比如
object ApplicationBuild extends Build {
// more settings
lazy val UnitTest = config("unit") extend(Test)
lazy val specs = "org.scala-tools.testing" %% "specs" % "1.6.9" % "unit"
val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA)
.configs(UnitTest)
.settings(inConfig(UnitTest)(Defaults.testTasks) : _*)
.settings(
testOptions in UnitTest += Tests.Argument("exclude integration"),
libraryDependencies += specs
)
}
当我传递没有选项的参数时,例如当我放置Test.Argument("plan")
时,这是有效的。但我无法找到如何传递更复杂的论点。我试过了
Tests.Argument("exclude integration")
Tests.Argument("exclude=integration")
Tests.Argument("-exclude integration")
Tests.Argument("-exclude=integration")
Tests.Argument("exclude", "integration")
Tests.Argument("exclude \"integration\"")
可能还有更多。仍然没有任何线索是什么是正确的语法。
有没有人知道如何将带有选项的参数传递给sbt的specs2?
答案 0 :(得分:7)
首先,在the specs2 guide之后,必须在规范中添加标签,例如
class MySpec extends Specification with Tags {
"My spec" should {
"exclude this test" in {
true
} tag ("foo")
"include this one" in {
true
}
}
}
要包含的命令行参数记录在here
然后可以选择性地包括或排除测试
test-only MySpec -- exclude foo
test-only MySpec -- include foo
答案 1 :(得分:5)
您也可以在不对构建进行任何更改的情况下使用
test-only * -- exclude integration
在Play 2.1-RC3中测试
答案 2 :(得分:4)
如果要传递多个参数,可以将多个字符串添加到一个Test.Argument
testOptions in Test += Tests.Argument("include", "unit")
答案 3 :(得分:2)
我使用的是Play2.2,根据您是否在播放控制台中,有两种方法可以执行此操作。
test-only full.namespace.to.TestSpec
test-only "full.namespace.to.TestSpec"
答案 4 :(得分:0)
我试图弄清楚如何使用Play为ScalaTest做类似的事情时遇到了这个问题。 SBT有关于如何配置additional test configurations的详细文档,但这些可能会对Play进行一些调整。
除了微妙的不同项目配置外,我发现我想从PlaySettings中获取一堆测试设置。以下是在“ / it ”目录中运行并生成带有集成测试源的Intellij项目。我可能仍然缺少报告和生命周期钩子,
object BuildSettings {
def testSettings = {
// required for ScalaTest. See http://stackoverflow.com/questions/10362388/using-scalatest-in-a-playframework-project
testOptions in Test := Nil
}
def itSettings = {
// variously cribbed from https://github.com/playframework/Play20/blob/master/framework/src/sbt-plugin/src/main/scala/PlaySettings.scala
sourceDirectory in IntegrationTest <<= baseDirectory / "it"
scalaSource in Test <<= baseDirectory / "it"
libraryDependencies += "play" %% "play-test" % play.core.PlayVersion.current % "it"
}
}
object ApplicationBuild extends Build {
val main = play.Project(
appName,
appVersion,
Dependencies.dependencies)
.configs( IntegrationTest )
.settings(Dependencies.resolutionRepos)
.settings(BuildSettings.testSettings)
.settings(Defaults.itSettings : _*)
.settings(BuildSettings.itSettings)
}