Kotlin:为单元测试提供内部功能

Jan*_*lek 21 unit-testing package-private kotlin

如果测试所在的模块与生产代码不同(这是常见的),那么使内部函数对测试可见的最佳方法是什么?

在Java中,我将生产代码和测试放在同一个包中,并使待测试的方法包私有(另外,@VisibleForTest如果将包装私有而非私有的唯一原因是添加注释)测试).不幸的是,Kotlin没有包私有的概念.

Jay*_*ard 20

使用internal访问修饰符标记的类和方法可以在Kotlin,Gradle和Intellij的当前版本中使用,以便从测试类访问这些方法.这些工具将主要和测试源路径视为同一模块的一部分.

你有没试过这个?如果它失败了你应该报告一个错误,因为这已经报告,修复,并且在任何当前版本都应该没问题.

  • 除非我做了类似错误的事情,否则它似乎不适用于非Kotlin单元测试,(在我的情况下Spock + Groovy):( (3认同)

hot*_*key 7

可能最简单的解决方案是根据生产сode在同一模块中的内部代码放置单元测试,并在单独的模块中仅保留使用公共API的集成测试.

这似乎是合理的,因为internal修饰符恰好意味着同一模块内的可见性.