我该如何仅开放课程以测试课程?

时间:2019-12-03 13:36:24

标签: unit-testing kotlin package-private

我主要是Java开发人员,在用Kotlin编写单元测试时想知道结构,

假设科特林没有package-private

  

private以限制文件的可见性

     

internal以限制模块的可见性

我怎么只开班来测试课?

我必须在kotlin类或开放类中为所有模块(内部)编写测试吗?

kotlin仅用于单元测试的开放方法是什么?

编辑

kotlin discuss中,@ bentolor找到了类似的问题/要求:

  

我应该如何正确进行单元/白盒测试?我想编写测试代码来测试类内部功能,这些功能我根本不想暴露给除我的测试类以外的其他类。

     

受包装保护的可见性是实现此目标的绝佳方法。鉴于Kotlin现在要求我有效地公开这些方法,并在整个项目中乱扔我组件的可见API才能对其进行测试。

     

在我看来,内部公司或多或少是公开的,因为它的范围要大得多。大多数项目都有……。在Kotlin的意义上大约有1-5个“模块”。

     

在此强烈要求/提倡本地包装的可见性。

1 个答案:

答案 0 :(得分:2)

从形式上讲,不可能在JVM上诚实地进行此操作,因为无法为可能的干预者的子集打开类。

但是,可以通过以下技巧部分完成它:

open class SomeClass internal constructor(val configurableParameter: Int) {
    companion object {
        private const val defaultInput = 123

        fun create() = SomeClass(defaultInput)
    }
}

只能从同一模块(或从测试)调用此类的构造函数。而且班级是公开的,所以任何人都可以使用它。但是,从外部模块中,只有两种构建类的方法:伴随对象或反射。

最后,由于构造函数是内部的,因此您无法在任何其他模块上从此类继承。