Kapt generatestubs – невозможно инициализировать объект с помощью внутреннего конструктора из unit-test

Пусть говорят, что мы имеем класс kotlin, определенный как:

package foo class Bar internal constructor() { //... } 

Когда я пытаюсь запустить этот объект из тестового метода, например:

 package foo class TestBar { @Test fun testingBar() { Bar() //<----- error } } 

Я получаю следующую ошибку:

 Cannot access '<init>': it is internal in 'Bar' 

Оба бара и TestBar находятся в одном модуле AndroidStudio (андроидная библиотека). Оба пути к источникам были определены в градиенте:

 ... sourceSets { main.java.srcDirs += 'src/main/kotlin' test.java.srcDirs += 'src/test/kotlin' } ... 

В целом тесты работают нормально, но я не могу создать какой-либо объект с внутренним конструктором.

Я использую:

 ext.kotlin_version = '1.1.3-2' 

РЕДАКТИРОВАТЬ

Спасибо за ответ. Я решил сделать простое андроидное многомодульное приложение с нуля, и он работал отлично.

Затем я попытался избавиться от зависимостей моего модуля один за другим, и выяснилось, что проблема вызвана зависимостью dagger2 gradle.

 dependencies { ... //dagger 2 implementation 'com.google.dagger:dagger:2.8' kapt 'com.google.dagger:dagger-compiler:2.8' } 

Когда я удаляю зависимость, я могу получить доступ к внутреннему конструктору из тестов без проблем. Является ли это признаком ошибки, или моя зависимость не определена должным образом?


EDIT 2 (решение)

Оказывается, проблема была вызвана опцией kapt's generatestubs = true . Чтобы сделать тесты, см. Внутренние классы, просто переключитесь на новую реализацию kapt:

http://kotlinlang.org/docs/reference/kapt.html

который в моем случае сводился к тому, чтобы избавиться от

 kapt { generateStubs = true } 

и добавление

apply plugin: kotlin-kapt'

в начале файла градиента.

internal видимость означает, что класс отображается только в том же модуле. Определение модуля Котлина :

Более конкретно, модуль представляет собой набор файлов Kotlin, скомпилированных вместе:

  • модуль IntelliJ IDEA;
  • проект Maven;
  • набор источников Gradle;
  • набор файлов, скомпилированных с одним вызовом задачи Ant.

Насколько я знаю, main и test – это два отдельных набора источников, и именно по этой причине он не работает.

 main.java.srcDirs += 'src/main/kotlin' test.java.srcDirs += 'src/test/kotlin' 
Intereting Posts
Скрипт Kotlin как параметры конфигурации Gradle, не использующие расширение Android Anko с пользовательской ошибкой просмотра (Kotlin) Java Interop: применить @JvmName к getters свойств в интерфейсе или абстрактном классе Kotlin Удалить все не буквенно-цифровые символы Android. установить textSize, чтобы высота соответствовала проценту его высоты макета родителя – возможно? Почему в Kotlin нет ключевых слов параллелизма? Ожидание объявления члена Kotlin с Android: базовые классы и расширения для Android Kotlin Hibernate игнорирует «ленивый» тип выборки и сразу загружает свойства Kotlin getParcelableArray из комплекта намерений не может передать его пользовательскому типу Kotlin TypeToken Ошибка «Неразрешенная ссылка» SpringBoot ArrayIndexOutOfBoundsException MethodParameter.getGenericParameterType Обновлено до Android Studio 3.0. Получение ошибки «Kotlin не настроено» Кортинский родной эквивалент дооснащения Kotlin: Java не может разрешить символ Котлина?