玩! 框架:自定义哪些测试运行(Play! framework: customize which

2019-08-01 22:17发布

我有一个玩游戏! 2斯卡拉应用程序,我使用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
    )
}

当我把这个工作当我传递参数不带选项,例如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?

Answer 1:

如果你想传递多个参数,你可以添加多个字符串一个Test.Argument

testOptions in Test += Tests.Argument("include", "unit")

还有的specs2用户指南中这样的例子在这里播放文档和那里 。



Answer 2:

首先,下面的specs2引导必须添加标签的规格,这样

class MySpec extends Specification with Tags {
  "My spec" should {
    "exclude this test" in {
      true
    } tag ("foo")

    "include this one" in {
      true
    }
  }
}

命令行参数,包括都记录在这里

然后一个可选择性地包括或排除测试用

test-only MySpec -- exclude foo
test-only MySpec -- include foo


Answer 3:

您还可以使用没有任何变化到您的构建

test-only * -- exclude integration

经测试,在播放2.1 RC3



Answer 4:

我使用Play2.2,并有2种方式来做到这一点取决于你是否是在玩控制台。

  1. 从控制台类型: test-only full.namespace.to.TestSpec
  2. 从终端类型: test-only "full.namespace.to.TestSpec"


Answer 5:

我碰到这个问题就来了,而试图找出如何做到与游戏ScalaTest类似的东西。 SBT有详细的关于如何配置文档的附加测试配置 ,但这些可以使用扭捏作游戏的一点。

除了微妙的不同项目的配置,我发现,我想婴儿床一堆从测试设置PlaySettings 。 以下是运行并产生与在“/它 ”目录集成测试源的项目的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)
}


文章来源: Play! framework: customize which tests are run