玩!框架:自定义运行哪些测试

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?

And*_*rea 7

首先,遵循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)


Jon*_*nso 5

您也可以使用而无需更改您的构建

test-only * -- exclude integration
Run Code Online (Sandbox Code Playgroud)

在Play 2.1-RC3中测试


Eri*_*ric 4

如果要传递多个参数,可以将多个字符串添加到一个参数中Test.Argument

testOptions in Test += Tests.Argument("include", "unit")
Run Code Online (Sandbox Code Playgroud)

此处的specs2用户指南和此处的Play 文档中都有这方面的示例。