Czy można używać funkcji pakietu Kotlin i właściwości pakietu w różnych zestawach źródłowych? Kiedy próbuję to zrobić, wyrzucam NoSuchMethodError
.Kotlin: java.lang.NoSuchMethodError w testach
Przykład
mam projekt Gradle z kodem Kotlin i dwa sourcesets w nim, main
i test
. W main
, Mam następujący kod w jednym z plików:
package ru.ifmo.ctddev.igushkin.dkvs
...
public val payloadSplitter: String = " ### "
W test
próbie uzyskania dostępu payloadSplitter
z następującego kodu:
package ru.ifmo.ctddev.igushkin.dkvs
...
public class MessageTests {
...
test fun testParsing() {
...
checkParseAndToString("p1b 345 ${payloadSplitter} set a b c")
}
...
}
I dokładnie w pierwszej linii, gdzie payloadSplitter
jest dostępne, w czasie wykonywania otrzymuję
java.lang.NoSuchMethodError: ru.ifmo.ctddev.igushkin.dkvs.DkvsPackage.getPayloadSplitter()Ljava/lang/String;
Inne zmienne globalne i funkcje są również niedostępne w test
z tym samym błędem.
UPD zespół Kotlin wyjaśnił tę kwestię i zapowiedział poprawkę here.
Czy masz jakieś funkcje/właściwości najwyższego poziomu w pakiecie ru.ifmo.ctddev.igushkin.dkvs w testach? –
Jak uruchomić testy? Czy mógłbyś opublikować swoją konfigurację gradle? Wygląda na to, że pakiet testowy jest skompilowany z pakietem głównym, ale działa bez niego. –
@SalomonBRYS, https://github.com/h0tk3y/dkvs/blob/master/build.gradle - oto on. – hotkey