макет общих тестов в kotlin с использованием мультиплатформенности

#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)
    }
}