Неразрешенная ссылка kotlintest при использовании gradle kotlin dsl

Вот мой build.gradle.kts:

import org.jetbrains.kotlin.config.KotlinCompilerVersion

plugins {
    ...
}

android {
    compileSdkVersion(27)

    defaultConfig {
        ...
    }

    buildTypes {
        ...
    }

    sourceSets {
        getByName("main").java.srcDirs("src/main/java", "src/main/kotlin")
        getByName("test").java.srcDirs("src/test/java", "src/test/kotlin")
        getByName("androidTest").java.srcDirs("src/androidTest/java", "src/androidTest/kotlin")
    }

}

tasks.withType<Test> {
    useJUnitPlatform()
}

dependencies {
    implementation(kotlin("stdlib-jdk7", KotlinCompilerVersion.VERSION))
    implementation("com.android.support:appcompat-v7:27.1.1")

    ...

    //Test
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.1.1")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.1.1")

    androidTestImplementation("com.android.support.test:runner:1.0.2")
    androidTestImplementation("com.android.support.test.espresso:espresso-core:3.0.2")
    androidTestImplementation("android.arch.core:core-testing:1.1.1")

    testImplementation("io.kotlintest:kotlintest-runner-junit5:3.1.10")
    testImplementation("io.mockk:mockk:1.8.7")
}

При создании с ./gradlew build ошибок не возникает, но если я использую указанный код из документа:

val test by tasks.getting(Test::class) {
    useJUnitPlatform { }
}

Я получаю следующую ошибку: Task with name 'test' not found in project ':app'.

My settings.gradle.kts:

include(":app")

Кто-нибудь знает, что здесь происходит? Странно, что AS может предложить мне автозаполнение и все такое, но во время компиляции я получаю эту неразрешенную ссылку.


person tufekoi    schedule 18.09.2018    source источник
comment
Вы пытаетесь создать индивидуальную задачу?   -  person Jeel Vankhede    schedule 18.09.2018
comment
Честно говоря, я не особо разбираюсь в том, что делаю здесь, я недавно перешёл на gradle dsl. Может не стоит так инициализировать тестовый блок?   -  person tufekoi    schedule 18.09.2018


Ответы (1)


Похоже, у вас проблема с этим блоком,

tasks.withType<Test> {
    useJUnitPlatform()
}

Если вы не используете задачу test, вы можете просто удалить этот код, и эта ошибка исчезнет!


Изменить:

Если вы хотите использовать test task. попробуйте это на уровне проекта build.gradle,

tasks.register("test", Test::class) {
    useJUnitPlatform()
}
person Jeel Vankhede    schedule 18.09.2018
comment
Разве мне не нужно указывать его, чтобы использовать классы из Kotlintest? - person tufekoi; 18.09.2018
comment
Я пробую то, что вы предложили в своем редактировании. Я получаю эту ошибку: Cannot add task 'test' as a task with that name already exists. - person tufekoi; 18.09.2018
comment
Вы удалили свою старую задачу? - person Jeel Vankhede; 18.09.2018
comment
Да, я удалил предыдущий tasks.withType<Test> { useJUnitPlatform() } - person tufekoi; 18.09.2018
comment
проверьте, существует ли он где-либо еще, согласно статистике ошибок - person Jeel Vankhede; 18.09.2018
comment
Я проверил, а его нигде нет. Я вернул свои изменения на kotlin DSL. Но у меня все еще возникает ошибка Could not find method test() for arguments [build_2masodbfs0dkel3fd2gljcpis$_run_closure3@649f12a] on project ':app' of type org.gradle.api.Project. , когда я добавляю test {useJUnitPlatform()} в свой файл градиента приложения - person tufekoi; 26.09.2018