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