与 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 对此有说明。
模拟以下接口时:
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 对此有说明。