为什么在单元测试中主源代码树中的“内部”类型不可见?

时间:2018-11-19 00:50:11

标签: intellij-idea kotlin

我在IntelliJ中有一个Kotlin项目,其结构如下:

  • main / com / foo / Bar.kt
  • test / com / foo / BarTest.kt

其中Bar定义为:

internal class Bar

BarTest类似于:

class BarTest {
    private lateinit var bar: Bar
}

我在参考消息Bar时在IntelliJ中遇到编译器错误:

  

无法访问“酒吧”:它在“ com.foo”内部

但是,这些测试是从命令行编译并运行的(通过Gradle)。

使用IntelliJ时如何抑制/删除此错误?

我的设置是:

  • macOS 10.14.1
  • IntelliJ 2018.2.6
  • 科特林1.3.10

1 个答案:

答案 0 :(得分:1)

我使用相同的IntelliJ安装同时打开了两个项目:

  • 以前的项目中,我能够对internal源代码树中的main类进行单元测试(都在同一IntelliJ模块的边界之内)
  • 我无法复制此设置的当前项目

IntelliJ在以前的设置中仍然没有出错的事实使我得出结论,该问题与我的IntelliJ设置无关。正如@JaysonMinard所建议的那样,我研究了Gradle配置的差异。

区别在于当前项目的顶级settings.gradle,我使用重命名模块的惯例,例如:

findProject(':module-blah')?.name = 'blah'

...以便在我的项目浏览器中连续列出它们时,以较短的名称引用我的Gradle项目(而不是按字母顺序分散在其他文件中)。删除此快捷方式可以恢复我在单元测试中寻找的行为。