0

テストを再定義して、構成からテスト スイートにいくつかの引数を提供します。

これは私の Build.scala からの抜粋です。

object Build extends Build {
  lazy val myProject = (project in file("my_project")).settings(
    test in Test := myProjectTest.value
  )

  val myProjectTest = Def.task {
    (testOnly in Test).toTask(" tests.Suites -- " +
      s"-Ddbserver=localhost " +
      s"-Ddbport=3306 ").value
  }
}

これは正常に動作します。

ここで、テスト スイートに次のようなアーティファクトの名前を付けたいと思いました。

val myProjectTest = Def.task {
  val art = (Keys.artifactPath in (Compile, packageBin)).value

  (testOnly in Test).toTask(" tests.Suites -- " +
    s"-Dartifact=${art.getCanonicalPath} " +
    s"-Ddbserver=localhost " +
    s"-Ddbport=3306").value
}

ただし、次のエラー メッセージが表示されます。

[error] /tmp/aa/project/Build.scala:17: Illegal dynamic reference: art
[error]     s"-Dartifact=${art.getCanonicalPath} " +
[error]                    ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed

SBT の内部構造、マクロ、タスクの依存関係グラフについてある程度の知識があり、スコープを使用していくつかのタスクを解決することさえできました。ここで map または flatMap を使用しようとしまし(Keys.artifactPath in (Compile, packageBin))たが、望ましい結果を得ることができません。アクセスしようとすると、 が表示され.valueますIllegal dynamic reference

どうか、私を導いてください。task の値を他の task (inputKey) パラメータに渡すだけです。

SBT バージョン: 0.13.5

4

2 に答える 2

0

Def.taskDyn試行錯誤により、最終的に(動的タスク)を使用してやりたいことを行いました:

object Build extends Build {
  lazy val myProject = (project in file("my_project")).settings(
    test in Test := myProjectTest.value
  )

  lazy val myProjectTest = Def.taskDyn {
    val art = (Keys.artifactPath in (Compile, packageBin)).value

    (testOnly in Test).toTask(" tests.Suites -- " +
      s"-Dartifact=${art.getCanonicalPath} " +
      s"-Ddbserver=localhost " +
      s"-Ddbport=3306")
  }
}
于 2015-04-29T13:57:38.360 に答える
0

経由でテスト オプションを指定するのを見たことがありません.toTask

あなたtestOptions in Testのために働くかどうかを見たいですか?テスト ドキュメントのオプションセクションを参照してください。

于 2015-04-29T11:56:13.193 に答える