假设我们有一个kotlin类定义为:
package foo
class Bar internal constructor() {
//...
}
当我尝试从测试方法中插入该对象时,例如:
package foo
class TestBar {
@Test
fun testingBar() {
Bar() //<----- error
}
}
我得到了以下错误:
Cannot access '<init>': it is internal in 'Bar'
Bar和TestBar都在同一个AndroidStudio模块(android )中,两个源的路径都是在一个gradle中定义的:
...
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
test.java.srcDirs += 'src/test/kotlin'
}
...
总的来说,测试似乎运行良好,但我无法使用内部构造函数创建任何对象。
我在用:
ext.kotlin_version = '1.1.3-2'
编辑
感谢您的反馈。我决定从头开始制作简单的android多模块应用程序,它运行得很好。
然后我试着逐个摆脱我的模块依赖,结果发现问题是由dagger2 gradle依赖引起的。
dependencies {
...
//dagger 2
implementation 'com.google.dagger:dagger:2.8'
kapt 'com.google.dagger:dagger-compiler:2.8'
}
当我移除依赖项时,我可以从测试中访问内部构造函数,而不会出现问题。这是错误的指示还是我的依赖关系没有被正确定义?
编辑2(解决方案)
事实证明,这个问题是由kapt的generatestubs = true
选项引起的。为了让测试看到内部类,只需切换到一个新的kapt实现:
http://kotlinlang.org/docs/reference/kapt.html
在我的例子中,这归结为摆脱了
kapt {
generateStubs = true
}
加上
apply plugin: kotlin-kapt'
在gradle文件的开头。
发布于 2017-07-10 04:43:16
internal
可见性意味着类只能在同一个模块中可见。Kotlin关于模的定义是
更具体地说,模块是一组编译在一起的Kotlin文件:
据我所知,main
和test
是两个独立的源代码集,这就是它不能工作的原因。
main.java.srcDirs += 'src/main/kotlin'
test.java.srcDirs += 'src/test/kotlin'
https://stackoverflow.com/questions/45007979
复制相似问题