2016-11-10 8 views
0

新しい種類のテスト用のsbtプラグインを作成したいと思います。簡単なことを保つために、私はsbt docsで言及されているものと同様の小さなファズテストプラグインを作成しました。sbtプラグイン - 独自の設定クラスパス不完全

私のプラグインクラスは、現在、次のようになります。

package sbtfuzz 

import sbt._, Keys._ 

object FuzzPlugin extends sbt.AutoPlugin { 
    override def requires = plugins.JvmPlugin 
    override def trigger = allRequirements 

    object autoImport { 
    lazy val Fuzz = config("fuzz") extend(Compile) 
    } 
    import autoImport._ 

    lazy val baseFuzzSettings: Seq[Def.Setting[_]] = Seq(
    test := { 
     println("fuzz test") 
    } 
) 
    override lazy val projectSettings = inConfig(Fuzz)(baseFuzzSettings) ++ inConfig(Fuzz)(Defaults.compileSettings) 
} 

私は、ドキュメント内のコードにcomaprisonに追加唯一のことは、コードをコンパイルするために取得タスクへinConfig(Fuzz)(Defaults.compileSettings)です。

sbt fuzz:compileを実行すると、src/fuzz/scalaのソースがコンパイルされます。しかし、ソースが実際のプロジェクトコードに依存している場合(すべてのテストと同様)、クラスが見つからないためコンパイルが失敗します。

[info] * Attributed(.../fuzz/target/scala-2.10/sbt-0.13/fuzz-classes) 

test:fullClasspathは、プロジェクトのクラスだけでなく、その中の依存関係を持っているのに対し:

[info] * Attributed(.../fuzz/target/scala-2.10/sbt-0.13/test-classes) 
[info] * Attributed(.../fuzz/target/scala-2.10/sbt-0.13/classes) 
[info] * Attributed(~/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar) 
[info] * Attributed(~/.ivy2/cache/org.scala-sbt/sbt/jars/sbt-0.13.13.jar) 
... 

この方法test:compileが正常にテストクラスをコンパイルすることができます私はfuzz:fullClasspathにエントリが1つだけ持っているので、それはだと思いますfuzz:compileではありません。

どのように私は私のfuzz設定を構成することができますtestコンフィギュレーションのような方法は、すべてのプロジェクトの依存関係を含め、ありますか?

ありがとうございます!

編集:私は成功した私のファズ・クラスをコンパイルすることができます。これにより

lazy val baseFuzzSettings: Seq[Def.Setting[_]] = Seq(
    fullClasspath in Fuzz ++= (dependencyClasspath in Test).value, 
    dependencyClasspath in Fuzz ++= (dependencyClasspath in Test).value, 
    ... 
) 

私は(私の意見では)かなり汚い回避策を見つけました。これを行うにはもっと元気な方法がありますか?ありがとう!

答えて

0

テストコンフィグでは、Defaults.testSettingsDefaults.testTasksを使用してください。順序は重要です:

inConfig(Fuzz)(Defaults.testSettings ++ Defaults.testTasks ++ baseSettings) 
+0

残念ながら、私はまだクラスパスに 'fuzz-classes'しかありません。私は 'autoImport'を' Test'から拡張するように変更し、プロジェクト設定を 'lazy val projectSettings = inConfig(Fuzz)(Defaults.testSettings ++ Defaults.testTasks ++ baseFuzzSettings)'に変更しました。 – amuttsch

+0

私が考えることができるもう一つのことは、プロジェクトの 'build.sbt'ファイルで' configs(Fuzz) 'を呼び出すことだけです。私は設定を介してそれを行う方法がわかりません。 – jkinkead

関連する問題