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'