Spek访问内部可见性Kotlin类

Spek访问内部可见性Kotlin类,kotlin,codacy,spek,Kotlin,Codacy,Spek,我已经完成了一个基于Maven的项目,该项目使用JUnit4 Runner中的Spek进行测试 我在Codacy中配置了这个项目,得到了一个有用的建议,要么记录我的公共类,要么降低它们的可见性(很好) 我发现Kotlin编译器似乎认为测试存在于不同的模块中,这使得在我的项目布局下很难进行有效的单元测试。如果类或接口的可见性降低到内部,则测试将不会编译 请建议一种机制来解决这个问题。在这种情况下不能使用内部可见性修改器吗?是否有一个有用的编译器配置或Spek配置可以克服这个问题?我认为这个建议确实

我已经完成了一个基于Maven的项目,该项目使用JUnit4 Runner中的Spek进行测试

我在Codacy中配置了这个项目,得到了一个有用的建议,要么记录我的公共类,要么降低它们的可见性(很好)

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


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

我最终发现,这个问题是由于对已标记为内部的类的子类和字段应用了
internal
可见性造成的。虽然Kotlin在某些情况下允许您这样做,但它似乎进一步将这些元素的可见性限制在代码中其他地方的其他编译单元,这在某种程度上具有将元素标记为私有的效果。由于多个元素位于同一个文件中,并且有些元素是嵌套的,所以我无法计算出应用的确切规则

为了缓解这些问题,一旦父类被标记为internal,就不要将子类或字段重新标记为internal。在这段经历之后,我通常还建议为每个编译单元组织一个元素(Java中需要这样做),而不是将大量元素放入一个文件中,因为这样会造成这种混乱


对于被Codacy警告弄糊涂的人,我还要指出一些Codacy建议是不可能满足的(例如,我发现将内部接口上的函数标记为双内部是不可能的-尽管这种做法可以在某些元素嵌套组合上使用).

我最终发现该问题是由于对已标记为internal的类的子类和字段应用了
internal
可见性造成的。虽然Kotlin在某些情况下允许您这样做,但它似乎进一步将这些元素的可见性限制在代码中其他地方的其他编译单元,这在某种程度上具有将元素标记为私有的效果。由于多个元素位于同一个文件中,并且有些元素是嵌套的,所以我无法计算出应用的确切规则

为了缓解这些问题,一旦父类被标记为internal,就不要将子类或字段重新标记为internal。在这段经历之后,我通常还建议为每个编译单元组织一个元素(Java中需要这样做),而不是将大量元素放入一个文件中,因为这样会造成这种混乱


对于被Codacy警告弄糊涂的人,我还要指出一些Codacy建议是不可能满足的(例如,我发现将内部接口上的函数标记为双内部是不可能的-尽管这种做法可以在某些元素嵌套组合上使用).

您使用的是什么Kotlin版本?我听说有一个openall Kotlin插件可以“打开”封闭类以进行测试:如果您在谷歌上搜索类似Kotlin mock的东西,有一些解决方案我正在使用Kotlin 1.1.51。您使用的是什么Kotlin版本?我听说有一个openall Kotlin插件可以“打开”出于测试目的关闭类:如果你在谷歌上搜索像kotlin mock这样的东西,有一些解决方案,我正在使用kotlin 1.1.51。