传递 lambda 参数时,Kotlin 单元测试数据 class 中的高阶函数失败

Kotlin unit testing high order function in data class fails when passing lambda argument

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,它们彼此不相等,即使它们的行为相同。因此,比较 dataOnedataTwo 失败。