在 class 中测试 Kotlin 扩展

Testing Kotlin extensions inside a class

我知道可以 ,但是如何在 class 中测试 Kotlin 扩展?

class D

class C {
  fun D.foo() {
    println("123")
  }
}

我应该将 D.foo 解释为 D 的私有还是可以对其进行单元测试?

foo函数是C上的public方法,但是由于一个方法调用不能有两个接收者,所以必须使用with函数.像这样:

with(C()) {
    D().foo()
}

使用 withapplyrun(或提供封闭 C 实例的任何其他方法)访问 foo 方法D.

您不能直接访问它的原因是 D.foo 只能从类型 C.

的实例访问

样本:

val c = C()
c.run { // apply or with
  D().foo() // accessible
}

D().foo() // not accessible

下面的也可以,但是用法不是很好:

D().run {
  C().run {
    foo() // accessible
  }
}

有趣的事情:this discussion提到支持多个接收器在积压中,但任何进一步的讨论都只是说不支持多个接收器并且没有计划支持它。也许以后会有支持,调用方法可能会更简单。