Как протестировать функцию kotlin, объявленную «внутренней», из тестов, когда используется модуль java-test-fixtures

Я попытался использовать тестовые приборы в своем проекте. в котлине. К сожалению, я столкнулся со странной проблемой, возможно, с ошибкой в ​​компоненте набора инструментов (не знаю, в каком именно).

Обычно функция Kotlin в объявлении main internal может быть доступна из модуля test из того же пакета. Существует ряд доказательств, подтверждающих это утверждение, в частности Kotlin: создайте внутренняя функция, видимая для модульных тестов

Действительно, если у нас есть src/main/kotlin /main.kt:

@file:JvmName("Main")
package org.example.broken_test_fixtures

internal fun sayHello(who: String): String = "Hello, $who!"

fun main() {
    println(sayHello("world"))
}

и src/test/kotlin/SayHelloTest. кт:

package org.example.broken_test_fixtures

import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test

class SayHelloTest {
    @Test
    fun testSayHello() {
        val expected = "Hello, world!"
        val actual = sayHello("world")
        assertEquals(actual, expected)
    }
}

тест успешно пройден с помощью обычного build.gradle.kts :

plugins {
    kotlin("jvm") version "1.3.61"
}


group = "org.example"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    implementation(kotlin("stdlib-jdk8"))
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.5.2")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.5.2")
}

tasks {
    compileKotlin {
        kotlinOptions.jvmTarget = "1.8"
    }
    compileTestKotlin {
        kotlinOptions.jvmTarget = "1.8"
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

Все идет нормально.

Но с добавлением одной строки в список плагинов:

id("java-test-fixtures")

сборка теста прерывается со следующей ошибкой:

e: /home/work/users/alex/broken-test-fixtures/src/test/kotlin/SayHelloTest.kt: (10, 22): Cannot access 'sayHello': it is internal in 'org.example.broken_test_fixtures'

Я обнаружил, что подобные проблемы упоминались в Gradle, плагин Kotlin Gradle для отслеживания ошибок. К сожалению, я не смог извлечь решение из этих проблем. Возможно, это другая проблема.

Для удобства читателей я подготовил небольшой репозиторий на Github, демонстрирующий проблему.


person user3159253    schedule 27.11.2019    source источник