【发布时间】:2018-11-19 00:50:10
【问题描述】:
我在 IntelliJ 中有一个 Kotlin 项目,其结构如下:
- main/com/foo/Bar.kt
- test/com/foo/BarTest.kt
其中Bar 定义为:
internal class Bar
而BarTest 类似于:
class BarTest {
private lateinit var bar: Bar
}
在 IntelliJ 中,我在引用 Bar 时遇到编译器错误,消息如下:
无法访问“Bar”:它在“com.foo”内部
然而,测试是从命令行编译和运行的(通过 Gradle)。
使用 IntelliJ 时如何抑制/消除此错误?
我的设置是:
- macOS 10.14.1
- IntelliJ 2018.2.6
- Kotlin 1.3.10
【问题讨论】:
-
有一些争论,但共识似乎是you should only write unit tests for the public API。至少,您针对非公共代码编写的任何测试都不应该被视为生产测试套件的一部分。
-
问题是我过去设置过这样的项目(我正在通过 GitHub 回顾它们)。我最近从我的操作系统上重新安装了所有东西,所以我想也许我错过了我之前应用的一些 IntelliJ 配置设置,或者最近的构建已经开始采用这种行为。
-
技术上它是允许的(内部跨度 main/test 在同一个模块中),并且必须在某处存在错误配置。或者您的项目的主要/测试方面不在同一个 IntelliJ 模块中?您是否使用
build.gradle作为源创建了您的项目?也许通过打开build.gradle来重新创建您的项目以查看您是否修复它。 (并检查模块)...显示您的目录结构以及构建文件会有所帮助。 -
所以,你知道它正常工作,只有你有足够的证据来知道什么与正常不同。将其与您以前的项目进行比较,检查模块,看看有什么不同。
标签: intellij-idea kotlin