パッケージオブジェクトは、以下のようにメインコードとテストコードツリーの両方に定義されています。 sbt run
でプログラムを実行すると、メインコードツリーのプログラムが有効になります。テストケース(sbt 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のこの単なる気まぐれですか、それは明確に定義されたスカラ/ SBTの特色ある?です。私は現在、依存関係の注入にこの動作を使用しています。モジュールバインディングをプロダクション用に定義し、対応するパッケージオブジェクトでテストします。これはお勧めのアプローチですか?
テストスコープで言う。テストクラスがメインクラスを呼び出し、メインクラスがパッケージオブジェクトを参照するとき。私はまだテストパッケージオブジェクトの値を取得します。テストクラスが別のパッケージであっても。 com.example.anotherpackage ..私はパッケージオブジェクトの値をテスト中にしています...パッケージオブジェクト変数の値は、呼び出し側クラスがどこにあるかに関係なく常に一致しますが、現在のスコープに依存します.. mainまたはtest .. –