我正在尝试使用 PowerMock 测试 Kotlin 静态方法(伴随对象),但 PowerMock 找不到该方法,也无法运行它。
测试类:
class MyClass {
companion object {
private fun doSomething(value : Int, value2 : Int) : Array<Byte>{
//some implementation to return byte array
}
}
}
测试班
@RunWith(PowerMockRunner::class)
@PrepareForTest(MyClass::class)
class MyClassTest{
@Before
fun before(){
PowerMockito.mockStatic(MyClass::class.java)
}
@Test
fun doSomethingTest(){
PowerMockito
.doCallRealMethod()
.`when`(MyClass::class.java, "doSomething", Int::class.java, Int::class.java)
val retVal : Array<Byte> = Whitebox.invokeMethod<Array<Byte>>(MyClass::class.java,
"doSomething", value, 5)
}
}
这将返回以下 2 个错误:
在 MyClass 类中找不到名称为“doSomething”且参数类型为 [int, int] 的方法
此处检测到未完成的存根:-> 在 MyClass.doSomething(MyClassTest.kt)
例如 thenReturn() 可能会丢失。正确的存根示例:when(mock.isOk()).thenReturn(true); when(mock.isOk()).thenThrow(异常); doThrow(exception).when(mock).someVoidMethod(); 提示:
- 缺少 thenReturn()
- 您正在尝试存根不支持的最终方法
- 在“thenReturn”指令完成之前,您正在对内部另一个模拟的行为进行存根
org.mockito.exceptions.misusing.UnfinishedStubbingException:在此处检测到未完成的存根:-> 在 MyClassTest.doSomethingTest(MyClassTest.kt)
例如 thenReturn() 可能会丢失。正确的存根示例:when(mock.isOk()).thenReturn(true); when(mock.isOk()).thenThrow(异常); doThrow(exception).when(mock).someVoidMethod();