13

私は遊びを持っています!Scala アプリケーションには 2 を使用し、テストには Specs2 を使用しています。testコマンドを使用してすべてのテストを実行したり、 test-only MyParticularSpec.

私がやりたいのは、次のようなことを行うために、特定の仕様、または仕様内の単一のメソッドをマークすることです。

  • 統合されていない (つまり、外部リソースにアクセスしない) すべてのテストを実行する
  • 書き込みモードで外部リソースにアクセスしないすべてのテストを実行する (ただし、読み取りテストは引き続き実行する)
  • 特定のテスト以外のすべてのテストを実行する

等々。

おそらくいくつかの注釈を追加することで、そのようなことができるはずだと思いますが、どうすればよいかわかりません。

一部のテストを選択的に実行し、他のテストを実行しないメカニズムはありますか?

編集私は使用時に自分自身に答えましたtest-onlytestそれでも、コマンド ライン オプションはこのタスクでは機能しません。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
    )
}

これは、オプションなしで引数を渡す場合、たとえば put の場合に機能します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 にオプション付きの引数を渡す方法を知っている人はいますか?

4

5 に答える 5

7

まず、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
于 2012-10-25T08:47:01.913 に答える
5

ビルドを変更せずに使用することもできます

test-only * -- exclude integration

Play 2.1-RC3 でテスト済み

于 2013-02-05T10:33:38.517 に答える
0

Play を使用して ScalaTest で同様のことを行う方法を見つけようとしているときに、この質問に出くわしました。SBT には、追加のテスト構成を構成する方法に関する詳細なドキュメントがありますが、これらは Play 用に少し調整する必要があります。

微妙に異なる Project 構成とは別に、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)
}
于 2013-02-18T12:29:09.103 に答える