Kotlin: сделать внутреннюю функцию видимой для модульных тестов

Если тесты находятся в другом модуле, нежели производственный код (который является общим), каков наилучший способ сделать внутренние функции видимыми для тестов?

В Java я бы имел рабочий код и тест в одном и том же пакете и сделал бы тестируемый метод закрытым (плюс добавьте @VisibleForTest аннотацию, если единственной причиной, по которой тест является закрытым, а не закрытым, является тест). К сожалению, у Kotlin нет концепции приватности пакетов.

3 ответа

Решение

Классы и методы отмечены internal модификатор доступа будет работать в текущих версиях Kotlin, Gradle, а также Intellij для доступа к этим методам из тестовых классов. Инструменты рассматривают основные и тестовые исходные пути как часть одного и того же модуля.

Вы уже попробовали это? И если это не помогло, вы должны сообщить об ошибке, так как она уже была исправлена ​​и исправлена ​​в любой текущей версии.

Вероятно, самое простое решение - поместить свои модульные тесты в зависимости от внутреннего кода в один и тот же модуль с рабочим кодом и оставить в отдельном модуле только интеграционные тесты, использующие общедоступный API.

Это кажется разумным, так как internal Модификатор означает именно видимость внутри того же модуля.

В моем случае это не сработало, потому что мы переименовали наши проекты внутри settings.gradleдобавить префикс, и Котлину это, похоже, не понравилось.

Как только мы удалили строки, переименовывающие проекты, мы смогли увидеть внутренних участников из main/внутри test/.

Другие вопросы по тегам