我有一个库,希望在Scala的单元测试和代码本身中公开。
在sbt中,我使用配置"test"
添加了我的库依赖项,然后它可以用于测试,但是我不能在代码中使用它。如果我保留配置为be或添加"compile"
,则无法在单元测试中将其导入。
libraryDependencies ++= Seq(
"org.scalacheck" %% "scalacheck" % "1.14.0",
"org.scalatest" %% "scalatest" % "3.0.6" % "test",
"org.scalactic" %% "scalactic" % "3.0.6" % "test")
主要问题是,我在其他代码abstract class UnitSpec extends FlatSpec with Matchers with ScalaCHeckDrivenPropertyChecks
中公开了一个我想在各处使用的抽象类,并在该库的测试中使用了它。如果我将"test"
添加到ScalaCheck,则无法在库的主代码中找到它。如果我保持原样,则不能从org.scalatestplus.scalacheck.ScalaCheckDrivenPropertyChecks
开始。过去还可以,并且可以在3.0.5和GeneratorDrivenProperyChecks
上正常工作,但是已经过时了。
有没有办法实现我想要的?我尝试了"test->compile"
,但这也没有达到我的期望……
答案 0 :(得分:2)
您可以组合配置。为了使库能够同时进行编译和测试,您只需添加bot配置。
// wrong: libraryDependencies += "<organization>" %% "<module>" % "<version>" % "compile->compile" % "test->compile"
语法大致意思是:项目配置 dependsOn(->) libraryDependency的配置。
更新
您还可以使用不同的配置将依赖项添加两次。
libraryDependencies += "<organization>" %% "<module>" % "<version>",
libraryDependencies += "<organization>" %% "<module>" % "<version>" % "test"
更新2
我认为第一个示例中的语法不是我想要提供的。
libraryDependencies += "<organization>" %% "<module>" % "<version>" % "compile->compile;test->compile"
至少这是我在libraryDependencies
中使用的语言。
答案 1 :(得分:0)
因此,您需要非测试代码中Scalatest JAR的特征。我不确定为什么它以前能起作用,但是对我来说,仅仅从最严格的依赖项中删除% "test"
就有意义。这将使其在compile
中可用,并且compile
中的所有内容也都在test
中可用。
对于Scalactic,我认为将其作为单独的依赖项的主要用例是在compile
中需要它,而仅在test
中使用Scalatest(或者根本不使用它) 。如果只有测试(或编译)都需要它们,Scalatest会带来Scalactic。
我尝试了“测试->编译”,但这也没有实现我希望的...
"test->compile"
与"test"
相同: