Kotlin: сделать внутреннюю функцию видимой для модульных тестов
Если тесты находятся в другом модуле, нежели производственный код (который является общим), каков наилучший способ сделать внутренние функции видимыми для тестов?
В Java я бы имел рабочий код и тест в одном и том же пакете и сделал бы тестируемый метод закрытым (плюс добавьте @VisibleForTest
аннотацию, если единственной причиной, по которой тест является закрытым, а не закрытым, является тест). К сожалению, у Kotlin нет концепции приватности пакетов.
3 ответа
Классы и методы отмечены internal
модификатор доступа будет работать в текущих версиях Kotlin, Gradle, а также Intellij для доступа к этим методам из тестовых классов. Инструменты рассматривают основные и тестовые исходные пути как часть одного и того же модуля.
Вы уже попробовали это? И если это не помогло, вы должны сообщить об ошибке, так как она уже была исправлена и исправлена в любой текущей версии.
Вероятно, самое простое решение - поместить свои модульные тесты в зависимости от внутреннего кода в один и тот же модуль с рабочим кодом и оставить в отдельном модуле только интеграционные тесты, использующие общедоступный API.
Это кажется разумным, так как internal
Модификатор означает именно видимость внутри того же модуля.
В моем случае это не сработало, потому что мы переименовали наши проекты внутри
settings.gradle
добавить префикс, и Котлину это, похоже, не понравилось.
Как только мы удалили строки, переименовывающие проекты, мы смогли увидеть внутренних участников из
main/
внутри
test/
.