我主要是Java开发人员,在用Kotlin编写单元测试时想知道结构,
假设科特林没有package-private
private
以限制文件的可见性
internal
以限制模块的可见性
我怎么只开班来测试课?
我必须在kotlin类或开放类中为所有模块(内部)编写测试吗?
kotlin仅用于单元测试的开放方法是什么?
编辑
在kotlin discuss中,@ bentolor找到了类似的问题/要求:
我应该如何正确进行单元/白盒测试?我想编写测试代码来测试类内部功能,这些功能我根本不想暴露给除我的测试类以外的其他类。
受包装保护的可见性是实现此目标的绝佳方法。鉴于Kotlin现在要求我有效地公开这些方法,并在整个项目中乱扔我组件的可见API才能对其进行测试。
在我看来,内部公司或多或少是公开的,因为它的范围要大得多。大多数项目都有……。在Kotlin的意义上大约有1-5个“模块”。
在此强烈要求/提倡本地包装的可见性。
答案 0 :(得分:2)
从形式上讲,不可能在JVM上诚实地进行此操作,因为无法为可能的干预者的子集打开类。
但是,可以通过以下技巧部分完成它:
open class SomeClass internal constructor(val configurableParameter: Int) {
companion object {
private const val defaultInput = 123
fun create() = SomeClass(defaultInput)
}
}
只能从同一模块(或从测试)调用此类的构造函数。而且班级是公开的,所以任何人都可以使用它。但是,从外部模块中,只有两种构建类的方法:伴随对象或反射。
最后,由于构造函数是内部的,因此您无法在任何其他模块上从此类继承。