与 UByteArray 匹配模拟签名失败,但与 ByteArray 匹配失败

Failed matching mocking signature with UByteArray but not with ByteArray

模拟以下接口时:

interface MyDescriptor {
    fun receive(): UByteArray
    fun send(bytes: UByteArray)
}

使用以下测试代码:

    @Test
    fun send_oneMessage(): Unit = runBlocking {
        val byteStream = mockk<MyDescriptor>()
        every { byteStream.send(any()) } just Runs
    }

我收到以下错误:

io.mockk.MockKException: Failed matching mocking signature for
SignedCall(retValue=, isRetValueMock=true, retType=class kotlin.Unit, self=MyDescriptor(#1), method=send-GBYM_sE(ByteArray), args=[null], invocationStr=MyDescriptor(#1).send-GBYM_sE(null))
left matchers: [any()]

现在,如果我使用实际的 UByteArray 而不是 any(),它会运行:

    @Test
    fun send_oneMessage(): Unit = runBlocking {
        val payload = "Payload message"
        val byteStream = mockk<MyDescriptor>()
        every { byteStream.send(payload.toByteArray().toUByteArray()) } just Runs
    }

我不禁注意到错误的这一部分:method=send-GBYM_sE(ByteArray), args=[null],它提到了 ByteArray 而不是 UByteArray,就像它在寻找错误一样函数签名(因此错误),但我不明白为什么。将 any() 更改为 any<UByteArray>() 会导致相同的错误,与使用 ofType(UByteArray::class)...

一样

但是,它适用于 ByteArray 而不是 UByteArray:

interface MyDescriptor {
    fun receive(): UByteArray
    fun send(bytes: ByteArray)
}

我是不是漏掉了什么?

注意:错误类似于this question,但我的测试代码有很大不同,因此是新问题。

MockK 目前不支持无符号类型,open issue 对此有说明。