gpt4 book ai didi

unit-testing - Kotlin 中的测试无法访问 protected 方法

转载 作者:IT老高 更新时间:2023-10-28 13:47:24 26 4
gpt4 key购买 nike

我要考B类:

class B : A {
override fun init() {
// do work here
}
}

class A {
protected fun init() { } // will be called by internal logic
}

在Java中调用没有问题:b.init()在测试方法中(测试类与测试对象在同一个包中),但是在Kotlin 编译器报错:

Cannot access 'init': it is protected in 'B'

@Test
fun `checks init`() {
val b = B()
b.init()
// assert work done
}

为什么它不起作用?如何解决这个问题(我想避免公开方法)?

最佳答案

由于 Kotlin 通过不允许包访问来降低 protected 的可见性(与 Java 相比),我能找到的最佳选择是使用反射解决方法(因为这是为了测试,我看不出为什么不是)

private fun invokeHiddenMethod(name: String) {
val method = sut.javaClass.getDeclaredMethod(name)
method.isAccessible = true
method.invoke(testSubject)
}

关于unit-testing - Kotlin 中的测试无法访问 protected 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41663170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com