我在main和test代碼樹中定義了一個包對象,如下所示。當我使用sbt run
執行程序時,主代碼樹中的一個會生效。而當我運行測試用例(sbt test
)時,測試代碼樹中定義的包對象會生效。對於例如在main和test中複製包對象
的src /主/階/ COM /示例/ package.scala
package object core {
val foo = "Hello World"
}
的src /測試/階/ COM /示例/ package.scala
package object core {
val foo = "Goodbye World"
}
sbt run
com.example.core.foo
的值是Hello World。在sbt test
的com.example.core.foo
值再見世界
這只是SBT的怪癖或者是一個定義良好的斯卡拉/舒巴坦特質?我目前使用這種行爲進行依賴項注入,方法是在相應的包對象中定義用於生產和測試的模塊綁定。這是一個明智的做法?
在測試範圍內說。當一個測試類調用一個主類和主類引用該包對象時,我仍然可以獲得測試包對象的值。即使測試類位於不同的包中。 com.example.anotherpackage ..我在測試中得到了package對象的值...所以package對象變量的值始終是一致的,與調用者類的位置無關,而僅取決於當前範圍.. main或test .. –