Kotlin Multiplatform Gradle модульный тест не разрешен kotlin.test ссылка - PullRequest
1 голос
/ 08 июня 2019

Stackoverflow!Я пытаюсь протестировать класс Kotlin в моей общей библиотеке для моего проекта Kotlin Multiplatform в Android Studio.

Мне пришлось несколько раз перенастроить файл build.gradle и мне удалось исправить большинство неразрешенных ссылок, но gradle все еще не может найти ссылку на аннотацию @Test, в то время как редактор распознает, что этоиз библиотеки kotlin.test.

Вот мой тестовый класс:

import kotlin.test.*
import kotlinx.serialization.json.*
import Recipe

class RecipeTest {
    @Test
    fun serializeTest() {
        val keys = arrayOf("Dessert", "Cookies", "Cute")
        val ingredients = arrayOf("12 cups sugar", "2 cups flour", "1 bottle warm love")
        val instructions = arrayOf("Sift together in bowl", "Cook however else you see fit!")
        val recipe = Recipe(
            "Macaroons",
            "Morgan",
            "Today",
            "small cookies",
            "1 hour",
            keys,
            "1 dozen macaroons",
            "Dessert",
            "French",
            false,
            ingredients,
            instructions,
            true
        )
        val jsonString = JSON.stringify(Recipe.serializer(), recipe)
        val obj = JSON.parse(Recipe.serializer(), jsonString)
        assertEquals(Recipe.toString(), jsonString)
        assertEquals(Recipe.toString(), obj.toString())
    }
}

И мой файл build.gradle модуля:


plugins {
    id("com.android.library")
}

apply plugin: 'kotlin-multiplatform'
apply plugin: 'kotlinx-serialization'

android {
    compileSdkVersion = 28
    buildToolsVersion = '28.0.3'
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
    }
    sourceSets {
        main {
            manifest.srcFile 'src/androidMain/AndroidManifest.xml'
        }
    }
}

kotlin {
    android {

    }
    iosArm64 {
        binaries {
            executable()
        }
    }
    iosX64 {
        binaries {
            executable()
        }
    }

    sourceSets {
        commonMain {
            dependencies {
                implementation 'org.jetbrains.kotlin:kotlin-stdlib-common'
                implementation 'org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.9.1'
            }
        }

        commonTest {
            dependencies {
                implementation 'org.jetbrains.kotlin:kotlin-stdlib-common'
                implementation 'org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.9.1'
                implementation kotlin('test')
                implementation kotlin('test-common')
                implementation kotlin('test-annotations-common')
            }
        }
        androidMain {
            dependencies {
                implementation 'org.jetbrains.kotlin:kotlin-stdlib'
                implementation kotlin('test-common')
                implementation kotlin('test-annotations-common')
            }
        }

        iosMain {

        }
    }
}

configurations {
    compileClasspath
}

Когда тест запускается из командной строки, сборка завершается неудачнос исключением, говоря «Unresolved reference: test» в строке с аннотацией @Test.

1 Ответ

0 голосов
/ 15 июня 2019

Как выяснилось, у меня все-таки были конфликтующие зависимости в моем исходном наборе commonTest. Зависимость 'test' вступала в конфликт с 'test-common', что приводило к проблемам, которые были скрыты в некоторых журналах сборки. После удаления дополнительных зависимостей сборка прошла успешно и , и тест был запущен. ( и пройдено!)

sourceSets {
   ...
   commonTest {
      dependencies {
         //only these are needed
         implementation kotlin('test-common')
         implementation kotlin('test-annotations-common')
      }
   }
   ...
}
...