And*_*rea 13 testing scala sbt specs2 playframework-2.0
我玩了!2用于Scala应用程序,我使用Specs2进行测试.我可以使用test
命令或特定规范运行所有测试test-only MyParticularSpec
.
我想做的是在规范中标记一些特定的规范,甚至是单个方法,以便执行以下操作:
等等.
我想这样的事情应该是可行的,也许是通过添加一些注释,但我不知道如何去做.
是否存在选择性运行某些测试而不是其他测试的机制?
编辑我在使用时已经回答了自己test-only
.命令行选项仍然不适用于该test
任务.在sbt指南之后,我尝试创建一个额外的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
)
}
Run Code Online (Sandbox Code Playgroud)
当我传递没有选项的参数时,例如当我放置时,这是有效的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\"")
Run Code Online (Sandbox Code Playgroud)
可能还有更多.仍然没有任何线索是什么是正确的语法.
有谁知道如何将带有选项的参数传递给sbt的specs2?
首先,遵循specs2指南,必须在规范中添加标签,如下所示
class MySpec extends Specification with Tags {
"My spec" should {
"exclude this test" in {
true
} tag ("foo")
"include this one" in {
true
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后可以选择性地包括或排除测试
test-only MySpec -- exclude foo
test-only MySpec -- include foo
Run Code Online (Sandbox Code Playgroud)
您也可以使用而无需更改您的构建
test-only * -- exclude integration
Run Code Online (Sandbox Code Playgroud)
在Play 2.1-RC3中测试
如果要传递多个参数,可以将多个字符串添加到一个参数中Test.Argument
testOptions in Test += Tests.Argument("include", "unit")
Run Code Online (Sandbox Code Playgroud)
此处的specs2用户指南和此处的Play 文档中都有这方面的示例。