Spek访问内部可见性Kotlin类

埃德·科威

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

我在Codacy中配置了该项目,并得到了一个有用的建议,可以记录我的公共课程或降低其可见度(很好)。

我发现Kotlin编译器似乎将测试视为存在于其他模块中,这使得在给定我的项目布局的情况下,很难进行有效的单元测试。如果类或接口的可见性降低为内部,则测试将无法编译。

请提出一种解决此问题的机制。在这种情况下是否只能使用内部可见性修改器?是否有可以克服此问题的有用的编译器配置或Spek配置?我认为这个建议确实是正确的。我不希望记录这些类,因为它们是内部类,将来可能会更改,或者完全不值得花些力气。

埃德·科威

最终,我发现问题是由于internal可见性应用于已经标记为内部的类的子类和字段而引起的。尽管Kotlin在某些情况下允许您执行此操作,但似乎将这些元素的可见性进一步限制为代码中其他位置的其他编译单元,从而在某种程度上将元素标记为私有。由于多个元素位于同一文件中,并且有些嵌套,因此我无法确定要应用的确切规则。

为减轻此类问题,一旦将父类标记为内部,请勿将子类或字段重新标记为内部。积累了这些经验之后,我通常还会建议为每个编译单元组织一个元素(这在Java中是必需的),而不是将大量元素压入一个文件中,因为这会造成这种混乱。

我还要指出一个对Codacy警告感到困惑的人,有些Codacy建议是无法满足的(例如,我发现不可能将内部接口上的功能标记为double-internal,尽管这种做法可以允许在元素嵌套的某些组合上使用)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章