kotlin - 与 UByteArray 但不与 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()]
现在,如果any()
我不使用实际的UByteArray
,它会运行:
@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]
,它提到 aByteArray
而不是 a UByteArray
,就像它正在寻找错误的函数签名(因此出现错误),但我不明白为什么。更改any()
forany<UByteArray>()
会导致相同的错误,就像使用ofType(UByteArray::class)
...
但是,它适用于ByteArray
而不是UByteArray
:
interface MyDescriptor {
fun receive(): UByteArray
fun send(bytes: ByteArray)
}
我错过了什么吗?
注意:错误与此问题相似,但我的测试代码完全不同,因此是新问题。
解决方案
MockK 目前不支持无符号类型,这是一个未解决的问题。
推荐阅读
- python - 对不同列之间的最高值输出进行分类
- jenkins - 通过命令提示符执行时,py.test' 不被识别为内部或外部命令、可运行程序或批处理文件
- loops - 如何在 Ansible uri 模块中使用正确的循环
- flutter - 当我多次访问屏幕时出现“状态不佳:流已被收听”
- android - 将 OSS Licenses Gradle Plugin 的主页指示器替换为关闭图标
- c++ - 根据 C++ 中同一列中 2 行的比较,删除 2D std::vector 中的列
- oracle - ORA-29283: invalid file operation: unexpected "LFI" error
- asp.net-core - Create folders in wwwroot on startup in NetCore
- sql - Adding a dot in a string in sql
- react-native - 在警报中按下时如何导航