Kotlin 如何将dataclass部分验证为函数参数?

Kotlin 如何将dataclass部分验证为函数参数?,kotlin,mockk,Kotlin,Mockk,我会让密码说出来 @测试 趣味测试(){ 数据类活动( val类型:String, val ts:即时, ) 活动(a:Activity):单位=mock() 趣味createActivity(类型:String){ persistActivity(活动(类型,Instant.now()) } 每个{persistActivity(any())}都会运行 创建活动(“foo”) 核实{ persistActivity(活动(“foo”,any())) } } 然而,这种方法失败了 Failed

我会让密码说出来

@测试
趣味测试(){
数据类活动(
val类型:String,
val ts:即时,
)
活动(a:Activity):单位=mock()
趣味createActivity(类型:String){
persistActivity(活动(类型,Instant.now())
}
每个{persistActivity(any())}都会运行
创建活动(“foo”)
核实{
persistActivity(活动(“foo”,any()))
}
}
然而,这种方法失败了

Failed matching mocking signature for

left matchers: [any()]
io.mockk.MockKException: Failed matching mocking signature for

left matchers: [any()]

如何验证
persistActivity()
是否传递了一个数据类,该数据类的某些字段具有松散的约束?我能在不使用繁琐的
match{}
函数的情况下实现这一点吗?

不会模拟
persistActivity
函数,因此验证必须失败。但是,如果模拟正确,您可以使用
match
进行部分验证:

验证{persistActivity(匹配{it.type==“foo”}

谢谢您的回答。我在编写时简化了代码。在现实生活中,
persistActivity
将被OFC嘲笑。我编辑了这个问题来解决这个问题。我可以不使用
match{}
函数来实现这一点吗?实际上,当活动数据类有很多字段时,这个函数非常麻烦。传递给
match
的闭包可以是任何东西。例如,您可以尝试重用Kotest的
shouldbeequaligningfields
。或者,您可以尝试使用mock的捕获功能(),但我想这会更加麻烦。还有一个选择:在MockKMatcherScope.Right上编写自己的扩展函数。谢谢你的澄清。我希望我将
any()
直接放入预期的数据类的尝试能够像预期的那样工作。世界并不总是那么美好