Возможно ли использовать функции пакета Kotlin и свойства пакета в разных наборах источников? Когда я пытаюсь сделать это, у меня есть NoSuchMethodError
.Kotlin: java.lang.NoSuchMethodError в тестах
Пример
У меня есть проект Gradle с Котлином кодом и два sourcesets в нем, main
и test
. В main
, у меня есть следующий код в одном из файлов:
package ru.ifmo.ctddev.igushkin.dkvs
...
public val payloadSplitter: String = " ### "
В test
попытке доступа payloadSplitter
со следующим кодом:
package ru.ifmo.ctddev.igushkin.dkvs
...
public class MessageTests {
...
test fun testParsing() {
...
checkParseAndToString("p1b 345 ${payloadSplitter} set a b c")
}
...
}
И именно в первой строке, где payloadSplitter
является доступ, во время выполнения я получаю
java.lang.NoSuchMethodError: ru.ifmo.ctddev.igushkin.dkvs.DkvsPackage.getPayloadSplitter()Ljava/lang/String;
Другие глобальные переменные и функции также недоступны в test
с той же ошибкой.
UPD Котлин команда объяснила этот вопрос и объявил исправление here.
Есть ли у вас какие-либо функции/свойства верхнего уровня в файле ru.ifmo.ctddev.igushkin.dkvs в тестах? –
Как вы проводите тесты? Не могли бы вы разместить свою конфигурацию gradle? Похоже, что тестовый пакет скомпилирован против основного пакета, но работает без него. –
@SalomonBRYS, https://github.com/h0tk3y/dkvs/blob/master/build.gradle - вот оно. – hotkey