Метод Mockk unmockk() не уничтожает mocks

#kotlin #testing #koin #mockk

#котлин #тестирование #koin #mockk

Вопрос:

Я запускаю следующий тестовый код, но каким-то странным образом я не понимаю, что он не очищает макеты между двумя тестами.

Я получаю environmentAsRequired как возврат repo.getClusterEnvironment(environmentName) во втором тесте вместо его выброса NoResultException() , что приводит к сбою второго теста, потому что исключение, которое я утверждаю, не генерируется.

Я уже проверил, и метод, помеченный @beforeEach, вызывается между тестами.

У кого-нибудь есть идеи?

 class ConfigUtilsTest {

@BeforeEach
fun start() {
    MockKAnnotations.init(this)
    val testModule = module() {
        single { mockk<Repository>() }
        single { mockk<AdminClient>() }
    }

    startKoin { modules(testModule) }
}

@AfterEach
fun stop() {
    stopKoin()
    unmockkAll()

}

@Test
fun `fetchOrCreateCluster creates the cluster if it is not on db but all required attributes are`() {

    val environmentName = "environmentForCluster"
    val clusterName = "NameForCluster"
    val clusterURL = "UrlForCluster"

    val environmentAsRequired = ClusterEnvironment(0, environmentName)
    val expectedResult = Cluster(
        clusterURL,
        clusterName,
        environmentAsRequired,
    )

    val repo = get(Repository::class.java)
    every { repo.getCluster(clusterURL) } throws NoResultException()
    every { repo.getClusterEnvironment(environmentName) } returns environmentAsRequired

    fetchOrCreateCluster(
        clusterName,
        environmentName,
        clusterURL
    ) shouldBe expectedResult
}

@Test
fun `fetchOrCreateCluster throws InvalidConfigException creating cluster if required attribute (environment) is not on DB`() {

    val clusterName = "NameForCluster"
    val clusterURL = "UrlForCluster"

    val repo = get(Repository::class.java)
    every { repo.getCluster(clusterURL) } throws NoResultException()
    every { repo.getClusterEnvironment(environmentName) } throws NoResultException()

    shouldThrow<InvalidConfigException> {
        fetchOrCreateCluster(
            clusterName,
            environmentName,
            clusterURL
        )
    }
}
 

}

Комментарии:

1. Не могли бы вы объяснить, почему это связано с Kotest?

2. Для утверждений используется Kotest. В этом случае shouldThrow<InvalidConfigException>{…}