如果测试代码与生产代码不在同一模块(这很常见),那么使内部函数对测试可见的最佳方法是什么?
在Java中,我会将生产代码和测试代码放在同一个包中,并使要测试的方法包范围内(此外,如果将其设置为包范围而不是私有的唯一原因是测试,则添加@VisibleForTest
注释)。不幸的是,Kotlin没有包范围的概念。
如果测试代码与生产代码不在同一模块(这很常见),那么使内部函数对测试可见的最佳方法是什么?
在Java中,我会将生产代码和测试代码放在同一个包中,并使要测试的方法包范围内(此外,如果将其设置为包范围而不是私有的唯一原因是测试,则添加@VisibleForTest
注释)。不幸的是,Kotlin没有包范围的概念。
internal
访问修饰符标记的类和方法可以在当前版本的 Kotlin、Gradle 和 Intellij 中工作,并且可以从测试类中访问这些方法。这些工具将主要和测试源路径视为同一模块的一部分。
您已经尝试过这个了吗?如果失败了,您应该报告一个 bug,因为这已经被报告、修复并且应该在任何当前版本中都可以正常运行。
可能最简单的解决方案是将与内部代码相关的单元测试放置在与生产代码相同的模块中,并仅在单独的模块中保留使用公共API的集成测试。
这似乎是合理的,因为internal
修饰符的意思恰好是在同一模块内的可见性。
settings.gradle
中重命名了项目以添加前缀,而Kotlin似乎不喜欢这样做。
一旦我们删除了重命名项目的行,我们就能够在test/
内部看到来自main/
的内部成员。
internal
修饰符可以帮助你解决这个问题:https://kotlinlang.org/docs/reference/visibility-modifiers.html - marcospereira