Я попытался использовать тестовые приборы в своем проекте. в котлине. К сожалению, я столкнулся со странной проблемой, возможно, с ошибкой в компоненте набора инструментов (не знаю, в каком именно).
Обычно функция 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, демонстрирующий проблему.