scala - 在 main 和 test 中重复包对象

标签 scala sbt

我在主代码树和测试代码树中都定义了一个包对象,如下所示。当我使用 sbt run 执行程序时主代码树中的那个生效。而当我运行测试用例 (sbt test) 时,测试代码树中定义的包对象生效。例如

src/main/scala/com/example/package.scala

package object core {
  val foo = "Hello World"
}

src/test/scala/com/example/package.scala
package object core {
val foo = "Goodbye World"
}

sbt run com.example.core.foo 的值是 Hello World .在 sbt test com.example.core.foo 的值是 再见世界

这只是 SBT 的一个怪癖还是一个定义明确的 scala/sbt 特征?我目前通过在其相应的包对象中定义用于生产和测试的模块绑定(bind)来将此行为用于依赖注入(inject)。这是一个可取的做法?

最佳答案

Scala 在您当前的路径中查找包对象,因此这是一个定义明确的行为。由于您的代码在 testmain居住在不同的地方它发现不同val foo s。

您使用此机制的方式与使用隐式非常相似。隐含和隐含解决的一般建议是不要滥用它。我认为在这种情况下,这不是提供依赖项的最佳方式。

你总是需要考虑你在什么范围内——如果你使用的是 main 中定义的类。在 test范围你怎么用foo来自 main ,以及如何使用 foo来自 test - 当您需要其中一个时。您必须已经考虑过它将如何工作并考虑各种场景。如果您的测试类在不同的包中怎么办,foo你会得到,这是否取决于你的测试类在哪里声明?

使依赖注入(inject)更加明确,不要在上面花费精神周期,或者有机会让某人感到困惑。

关于scala - 在 main 和 test 中重复包对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36146534/

相关文章:

scala - scala.sys.process 是否阻塞流处理线程?

scala - sbt 下载组件失败

scala - 在 scala 中的 Play 和控制台应用程序之间共享代码

web-services - Play Framework WS.url 永远卡住

scala - 有条件地组合枚举

scala - 链接调用时省略点

scala - 带有 Scala 2.10 的lift-json

scala - sbt(构建 Scalatra)立即失败,内存小于 2GB

scala - java可执行jar的SBT项目

scala - 从 Play WS 获取 ahcResponse