Spek访问内部可见性Kotlin类

我已经整合了一个基于Maven的项目,在Junit 4 Runner中使用Spek进行测试。

我在Codacy中配置了这个项目,并得到了一个有用的建议,要么记录我的公开课,要么降低他们的知名度(很好)。

我发现Kotlin编译器似乎将测试视为存在于不同的模块中,这使得我的项目布局非常难以进行有效的单元测试。 如果类或接口的可见性降低到内部,测试将不会编译。

请建议一个机制来解决这个问题。 在这种情况下是不是可以使用内部可见性修饰符? 有没有一个有用的编译器配置或Spek配置可以解决这个问题? 我认为这个建议确实是正确的。 我不希望将这些课程记录下来,因为它们是内部的,将来可能会改变,或者说文档是不值得的。

我最终发现,这个问题是由于将internal可见性应用于已经标记为内部的类的子类和字段而导致的。 虽然Kotlin会允许你在某些情况下做到这一点,但是它似乎进一步限制了这些元素在代码中其他地方的其他编译单元的可见性,这对于将元素标记为私有的有些影响。 我无法制定出正确的规则,因为多个元素在同一个文件中,而且有一些是嵌套的。

为了减轻这些问题,不要将子类或字段重新标记为内部,一旦父标记为内部。 在这个经验之后,我通常还会建议每个编译单元(如Java所要求的)组织单个元素,而不是将大量元素推送到单个文件中,因为这会造成这种混淆。

我还会注意到一些人被Codacy警告混淆,认为某些Codacy建议是不可能满足的(例如,将内部接口上的函数标记为双重内部,我发现这是不可能的 – 尽管这种做法可以允许在元素嵌套的一些组合上)。