我想为一种新的测试创建一个sbt插件。为了保持简单,我创建了一个小型的模糊测试插件,类似于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中向文档中的代码添加的惟一内容是编译代码的get任务的inConfig(Fuzz)(Defaults.compileSettings)。
如果我执行sbt fuzz:compile,将编译src/fuzz/scala中的源代码。但是,如果源代码依赖于实际的项目代码(就像所有测试一样),那么编译失败,因为没有找到类。我想是因为fuzz:fullClasspath只有一个条目:
[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:compile则不能编译。
如何像配置fuzz配置那样配置test配置,包括所有的项目依赖关系?
谢谢!
编辑:,我发现了一个(在我看来)相当肮脏的解决方法:
lazy val baseFuzzSettings: Seq[Def.Setting[_]] = Seq(
fullClasspath in Fuzz ++= (dependencyClasspath in Test).value,
dependencyClasspath in Fuzz ++= (dependencyClasspath in Test).value,
...
)有了这个,我可以成功地编译我的fuzz类。有什么更理智的方法吗?谢谢!
发布于 2016-11-10 19:47:20
对于测试信任,请使用Defaults.testSettings和Defaults.testTasks。请注意,命令很重要:
inConfig(Fuzz)(Defaults.testSettings ++ Defaults.testTasks ++ baseSettings)https://stackoverflow.com/questions/40532409
复制相似问题