Kotest Koin 확장

Kotest Koin 확장에 대해 소개한다.

Koin DI FramworkKoinExtension 확장을 통해 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)을 사용하는 대신 루트 테스트의 모든 리프에 걸쳐 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"
            }
        }
    }
}

참조




최종 수정 : 2024-04-14