【问题标题】:Kotlin unit testing high order function in data class fails when passing lambda argument传递 lambda 参数时,Kotlin 单元测试数据类中的高阶函数失败
【发布时间】:2020-05-24 00:33:41
【问题描述】:
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 时测试失败。

【问题讨论】:

    标签: kotlin junit junit5


    【解决方案1】:

    由于数据类的实例是逐个成员比较的,因此第一个测试成功,因为“same”等于“same”,而 exec 的默认值是{},它等于它自己。在第二个测试中,您为每个实例提供自己的 lambda,即使它们的行为相同,它们也不相等。因此,比较 dataOnedataTwo 失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-27
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2021-02-25
      • 1970-01-01
      • 2011-06-22
      相关资源
      最近更新 更多