#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>{…}