#kotlin #gradle #kotlin-multiplatform #mockk
#kotlin #gradle #kotlin-мультиплатформенный #макет
Вопрос:
Я не могу использовать общую макет библиотеки ( mockk.io ), с мультиплатформенной платформой kotlin. На их веб-сайте говорится, что для использования mockk в мультиплатформенной платформе kotlin вам просто нужно добавить эту строку в свой gradle. testImplementation "io.mockk:mockk-common:{version}"
Я добавил его, и он строится нормально, только когда я хочу его использовать, он выходит из строя. Отдавая
Unresolved reference: io
Unresolved reference: mockk
мой файл gradle
kotlin {
val hostOs = System.getProperty("os.name")
val isMingwX64 = hostOs.startsWith("Windows")
val nativeTarget = when {
hostOs == "Mac OS X" -> macosX64("native")
hostOs == "Linux" -> linuxX64("native")
isMingwX64 -> mingwX64("native")
else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
}
nativeTarget.apply {
binaries {
executable {
entryPoint = "main"
}
}
}
sourceSets {
val nativeMain by getting
val nativeTest by getting
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
implementation("io.mockk:mockk-common:1.10.4")
}
}
}
}
Ответ №1:
Если что-то не изменилось, mockk не работает на Kotlin Native.
Комментарии:
1. Да, это то, что я тоже пытался понять. У меня есть собственная цель, но у меня также есть общий код. Я считаю, что mockk работает с общим кодом и общим тестом, верно?
2. Если ваш общий код предназначен для работы на родном языке, то нет. Это не сработает, если нет собственной реализации.
3. github.com/mockk/mockk/issues/58 -> Для дальнейшего использования
Ответ №2:
Вы можете использовать Mockative для моделирования интерфейсов в Kotlin / Native и Kotlin Multiplatform, что мало чем отличается от того, как вы имитируете зависимости с помощью MockK или Mockito.
Полное раскрытие информации: я являюсь одним из авторов Mockative
Вот пример:
class GitHubServiceTests {
@Mock val api = mock(classOf<GitHubAPI>())
val service = GitHubService(api)
@Test
fun test() {
// Given
val id = "mockative/mockative"
val mockative = Repository(id = id, name = "Mockative")
given(api).invocation { fetchRepository(id) }
.thenReturn(mockative)
// When
val repository = service.getRepository(id)
// Then
assertEquals(mockative, repository)
// You can also verify function calls on mocks
verify(api).invocation { fetchRepository(id) }
.wasInvoked(exactly = once)
}
}