Kotest Koin拡張
Kotest Koin拡張について紹介する。
Koin DI Frameworkは、KoinExtension拡張を通じてKotestと一緒に使用できる。
プロジェクトで拡張を使用するには、プロジェクトに依存関係を追加する。
io.kotest.extensions:kotest-extensions-koin:${version}
依存関係が追加されると、テストでKoinを簡単に使用できる。
class KotestAndKoin : FunSpec(), KoinTest {
override fun extensions() = listOf(KoinExtension(myKoinModule))
val userService by inject<UserService>()
init {
test("use userService") {
userService.getUser().username shouldBe "LeoColman"
}
}
}
デフォルトでは、拡張はリーフテスト(leaf test)間でKoinコンテキストを開始/停止する。DescribeSpecのようなネストされたSpecスタイルを使用し、ルートテストのすべてのリーフにわたってKoinコンテキストを維持したい場合、たとえばテスト間でモック宣言を共有するためには、KoinExtensionコンストラクタでライフサイクルモードをKoinLifecycleMode.Rootに指定できる。
class KotestAndKoin : DescribeSpec(), KoinTest {
override fun extensions() = listOf(KoinExtension(module = myKoinModule, mode = KoinLifecycleMode.Root))
val userService by inject<UserService>()
init {
describe("use userService") {
it("inside a leaf test") {
userService.getUser().username shouldBe "LeoColman"
}
it("this shares the same context") {
userService.getUser().username shouldBe "LeoColman"
}
}
}
}