gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:05:52 24 4
gpt4 key购买 nike

我在主代码树和测试代码树中都定义了一个包对象,如下所示。当我使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com