Có thể sử dụng các chức năng gói Kotlin và các thuộc tính gói trong các nguồn khác nhau không? Khi tôi cố gắng làm như vậy, tôi đã ném NoSuchMethodError
.Kotlin: java.lang.NoSuchMethodError trong các thử nghiệm
Ví dụ
Tôi có dự án với mã Kotlin và hai sourcesets trong nó, main
và test
Gradle. Trong main
, tôi có mã sau đây trong một trong những tập tin:
package ru.ifmo.ctddev.igushkin.dkvs
...
public val payloadSplitter: String = " ### "
Trong test
tôi thử truy cập payloadSplitter
với đoạn mã sau:
package ru.ifmo.ctddev.igushkin.dkvs
...
public class MessageTests {
...
test fun testParsing() {
...
checkParseAndToString("p1b 345 ${payloadSplitter} set a b c")
}
...
}
Và chính xác trong dòng đầu tiên nơi payloadSplitter
là được truy cập, vào thời gian chạy, tôi nhận được
java.lang.NoSuchMethodError: ru.ifmo.ctddev.igushkin.dkvs.DkvsPackage.getPayloadSplitter()Ljava/lang/String;
Các biến và hàm toàn cầu khác cũng không thể truy cập được trong test
với cùng lỗi.
UPD Kotlin đội giải thích vấn đề này và thông báo việc sửa chữa here.
Bạn có bất kỳ chức năng/thuộc tính cấp cao nhất trong gói ru.ifmo.ctddev.igushkin.dkvs trong các thử nghiệm không? –
Làm thế nào để bạn chạy thử nghiệm? Bạn có thể đăng cấu hình gradle của bạn? Có vẻ như gói thử nghiệm được biên dịch dựa trên gói chính nhưng được chạy mà không có gói đó. –
@SalomonBRYS, https://github.com/h0tk3y/dkvs/blob/master/build.gradle - đây rồi. – hotkey