Spek访问内部可见性Kotlin类

时间:2017-10-12 02:19:17

标签: kotlin codacy spek

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

为了缓解此类问题,一旦父级被标记为内部,就不要将子类或字段重新标记为内部。在此经验之后,我通常还建议为每个编译单元组织一个元素(在Java中是必需的),而不是将大量元素推送到单个文件中,因为它可能会造成这种混淆。

我还会注意到那些对Codacy警告感到困惑的人,一些Codacy建议无法满足(例如,将内部界面上的功能标记为双内部,我发现这是不可能的 - 尽管可以在元素嵌套的某些组合上允许这种做法。)