如何在 sbt 项目中发布仅测试对象
How to publish Test Only Objects in a sbt project
我一直在为我的团队开发一个公共库,我需要在其中为最终用户提供模拟数据以编写单元测试代码。理想情况下,模拟对象应该只对引用我的包的测试可用,但我不确定该怎么做。
我的包结构是:
├── common
│ ├── src
│ │ ├── main
│ │ │ ├── resources
│ │ │ └── scala
│ │ └── test
│ │ ├── resources
│ │ └── scala
│ │ └── MockData.scala // <--- object defined here
├── build.sbt
在我的build.sbt中,我有
Test / publishArtifact := true
Test / publish := true
packageBin / publishArtifact := true
我使用 sbt clean; sbt compile; sbt publishLocal
在本地发布我的图书馆。
在引用上述库的项目中,我在 build.sbt 中添加了以下内容:
ThisBuild / libraryDependencies ++= Seq(
"org.my" %% "common" % "0.0.1",
"org.my" %% "common" % "0.0.1" % Test,
)
但是在编写测试时,我找不到 MockData.scala 中定义的对象。
请提供一些提示,非常感谢。
----------------更新----------------
谷歌搜索后,我决定编写一个单独的模块来仅发布测试数据。所以我的包结构变成了:
├── common
│ ├── src
│ │ ├── main
│ │ │ ├── resources
│ │ │ └── scala
│ │ └── test
│ │ ├── resources
│ │ └── scala
├── common-testkit
│ ├── src
│ │ └── main
│ │ ├── resources
│ │ └── scala
│ │ └── MockData.scala // <--- object defined here
├── build.sbt
问题在于您要求在其他项目中检索测试代码的方式。
"org.my" %% "common" % "0.0.1" % Test
意味着在 运行 你的其他项目的测试时依赖项目的“主要”代码。这就是范围 Test
(在版本之后)的意思。
你想要的是运行你的测试依赖于普通项目的“测试代码”。这是通过在 sbt 中指定所谓的“分类器”来完成的:
"org.my" %% "common" % "0.0.1" % Test classifier "tests"
我一直在为我的团队开发一个公共库,我需要在其中为最终用户提供模拟数据以编写单元测试代码。理想情况下,模拟对象应该只对引用我的包的测试可用,但我不确定该怎么做。
我的包结构是:
├── common
│ ├── src
│ │ ├── main
│ │ │ ├── resources
│ │ │ └── scala
│ │ └── test
│ │ ├── resources
│ │ └── scala
│ │ └── MockData.scala // <--- object defined here
├── build.sbt
在我的build.sbt中,我有
Test / publishArtifact := true
Test / publish := true
packageBin / publishArtifact := true
我使用 sbt clean; sbt compile; sbt publishLocal
在本地发布我的图书馆。
在引用上述库的项目中,我在 build.sbt 中添加了以下内容:
ThisBuild / libraryDependencies ++= Seq(
"org.my" %% "common" % "0.0.1",
"org.my" %% "common" % "0.0.1" % Test,
)
但是在编写测试时,我找不到 MockData.scala 中定义的对象。
请提供一些提示,非常感谢。
----------------更新----------------
谷歌搜索后,我决定编写一个单独的模块来仅发布测试数据。所以我的包结构变成了:
├── common
│ ├── src
│ │ ├── main
│ │ │ ├── resources
│ │ │ └── scala
│ │ └── test
│ │ ├── resources
│ │ └── scala
├── common-testkit
│ ├── src
│ │ └── main
│ │ ├── resources
│ │ └── scala
│ │ └── MockData.scala // <--- object defined here
├── build.sbt
问题在于您要求在其他项目中检索测试代码的方式。
"org.my" %% "common" % "0.0.1" % Test
意味着在 运行 你的其他项目的测试时依赖项目的“主要”代码。这就是范围 Test
(在版本之后)的意思。
你想要的是运行你的测试依赖于普通项目的“测试代码”。这是通过在 sbt 中指定所谓的“分类器”来完成的:
"org.my" %% "common" % "0.0.1" % Test classifier "tests"