data class DataSample(val name: String, val exec: () -> Unit = {})
我试图理解为什么以下测试会失败:
@Test
fun `testing data fails`() {
val dataOne = DataSample("the_same") {
}
val dataTwo = DataSample("the_same") {
}
assertEquals(dataOne, dataTwo)
}
以下将通过:
@Test
fun `testing data pass`() {
val dataOne = DataSample("the_same")
val dataTwo = DataSample("the_same")
assertEquals(dataOne, dataTwo)
}
当省略 lambda 时,测试将通过,而当提供 lambda 时,测试将失败。
最佳答案
由于数据类的实例是逐个成员进行比较的,因此第一个测试成功,因为“相同”等于“相同”,并且 exec 的默认值为 {}
,它等于自身.在第二个测试中,您为每个实例提供了自己的 lambda,它们彼此不相等,即使它们的行为相同。因此,比较 dataOne
和 dataTwo
失败。
关于传递 lambda 参数时,Kotlin 单元测试数据类中的高阶函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61980257/