bounty将在5小时后到期。回答此问题可获得+100声望奖励。lostintranslation希望引起更多关注这个问题。
我正在尝试用mockk模拟Kotlin中的私有函数调用。运行时遇到以下错误:
班级是最终的。将@MockKJUnit4Runner放在您的测试中,或添加MockK Java Agent instrumentation以使所有类“打开”
我完全理解尝试测试私有方法的含义,但在这一点上,这是我需要做的。
验证码:
class ClassToTest {
private fun privateMethod(text: String): String {
return "Hello $text"
}
}
class TestClass {
@Before
fun setup() {
MockitoAnnotations.openMocks(this)
}
@Test
fun testSplitNumbers() {
val clazz = spyk<ClassToTest>()
val method = clazz.javaClass.getDeclaredMethod("privateMethod", String::class.java)
method.isAccessible = true
val result = method.invoke(clazz, "Test") as? String
Assert.assertEquals("Hello Test", result)
}
}
2条答案
按热度按时间eqqqjvef1#
正如文档中所概述的,MockK支持监视和模拟私有函数。
一定要理解类的the implications of testing private methods。
假设您使用了一个无法控制的第三方库,它提供了一个方法
publicMethod
,该方法反过来调用一个私有方法privateMethod
,您希望模拟后者以简化测试。您可以使用以下内容模拟
privateMethod
:t9aqgxwy2#
你可以试试这个…
或
或
With no argument:
或
With String argument: