-1

我正在尝试使用 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(); 提示:

  1. 缺少 thenReturn()
  2. 您正在尝试存根不支持的最终方法
  3. 在“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();

4

0 回答 0