DBアクセスのためにSlickを使用するテストスイートがあります。このスイートの一部のテストはDBにアクセスし、一部のテストはアクセスしません。 マイスイートは、効果的にスイートの実行の開始時にDataBaseDef
を初期化暗黙的な値は、暗黙的なメソッドのパラメータ値として使用すると遅延値でもかまいませんか?
implicit val db = DB.getDB
を持っています。この値は、いくつかのメソッドでは暗黙のパラメータ値として使用されます。私が変更された場合は今
override def afterAll():Unit={
db.close()
super.afterAll()
}
: はまた、それがスイートの実行の最後にdb
を閉じafterAll()
を持って implicit lazy val db = DB.getDB
その後、正確に何が起こるのだろうか?
DBを使用しないテストのみを実行すると、接続は初期化されず、afterAll()
では接続を終了しようとしますが、この場合は問題があります。私は実行しようとしましたがエラーは発生せず、例外もスローされませんでした...
私の知識の知識は、私が怠け者と組み合わせて理解するのを助けるのに十分ではありません。
あなたは正しいです。私は質問を投稿した後でもっと思ったし、それは私にはっきりと分かりました。 まだ、メソッド呼び出しで暗黙的なパラメータ値の発見に 'lazy'修飾子が及ぼす影響を明確にしたいと思います。あなたはこれを手伝ってもらえますか? –
または私は安全に標準の規則を引き継ぐことができます:これに関して仕様上何も言及されていない場合、レイジーはこれに関して何の効果もありませんか? –
@AlexanderArendar呼び出されているメソッドで必要とされる '暗黙のlazy val'がある場合、その値を実体化します。あなたの場合、それはDB接続を作成することを意味します。 –