Доступ к Spek для внутренних видимых классов Kotlin

Я собрал проект на основе Maven, который использует Spek в Runner Junit 4 для тестирования.

Я настроил проект в Codacy и получил полезное предложение либо документировать мои публичные классы, либо уменьшать их видимость (отлично).

Я обнаружил, что компилятор Kotlin, по-видимому, рассматривает тесты как существующие в другом модуле, что очень затрудняет эффективное тестирование модулей с учетом моего макета проекта. Тесты не будут компилироваться, если видимость классов или интерфейсов сводится к внутренней.

Пожалуйста, предложите механизм для исправления этого. В этой ситуации невозможно использовать встроенный модификатор видимости? Есть ли полезная конфигурация компилятора или конфигурация Spek, которая может решить проблему? Я думаю, что предложение действительно верно; Я не хочу документировать классы, потому что они являются внутренними и могут измениться в будущем, или документация просто не стоит усилий.

В итоге я обнаружил, что проблема возникла из-за применения internal видимости к подклассам и полям класса, который уже был отмечен как внутренний. Хотя Kotlin позволит вам сделать это в некоторых случаях, он, как представляется, еще больше ограничивает видимость этих элементов для других единиц компиляции в другом месте кода, что в некоторой степени влияет на то, что элемент является частным. Я не смог определить, какое точное правило применяется, поскольку несколько элементов находятся в одном файле, а некоторые – вложенные.

Чтобы устранить такие проблемы, не перемаркируйте подклассы или поля как внутренние, если родительский знак отмечен как внутренний. После этого опыта я бы также предложил организовать единый элемент на единицу компиляции (как это требуется в Java) вместо того, чтобы вставлять большое количество элементов в один файл, поскольку он может создать такую ​​путаницу.

Я также хотел бы отметить кого-то, кто смущен предупреждениями Codacy о том, что некоторые предложения Codacy невозможно удовлетворить (например, функции маркировки на внутреннем интерфейсе, как двойные внутренние, мне показалось невозможным), несмотря на то, что эта практика может быть допускается при некоторых сочетаниях вложения элементов).

Intereting Posts
Как я могу приостановить событие, проходящее через наблюдаемое? Как я могу игнорировать все предупреждения для Kotlin в IntelliJ IDEA? Вывод типа компилятора Kotlin не может выбрать способ вызова (двусмысленность с типичными типами) оба приложения: showAsAction = "ifRoom" и андроид: showAsAction = "ifRoom" работают не так, как ожидалось Как получить результат функции огурца Какой язык используется для шаблонов строк kotlin? Сериализация KMongo BSONTimestamp Написание модульных тестов в Котлине, обмен переменных? Kotlin klaxon проанализирует направление Google Api Swift – выход из внешней функции из закрытия Maven с Kotlin 1.2: Требуемый класс отсутствовал kotlin / reflection / KDeclarationContainer Элементы меню панели инструментов Android никогда не отображаются, но переходят в переполнение Внедрение интерфейса Java – Kotlin В Котлине как открыть ссылку в новом окне Не может быть возврата внутри Runnable SAM в Котлин?