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

标签 kotlin junit junit5

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 失败。

关于传递 lambda 参数时,Kotlin 单元测试数据类中的高阶函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61980257/

相关文章:

junit - 使用 TestNG 进行 Spring 依赖注入(inject)

java - 如何在 JUnit 中打印错误结果?

java - @Value 在 junit 5 中为 null

java - 如何根据条件对数组的项目进行分组而不返回键?

kotlin - 带有kafka流绑定(bind)器: how to set `trusted.packages` for a Stream Processor (that's different than consumer and producer)的 Spring Cloud 流

android - 进度条没有填满它应该填满的空间

java - 我可以在我的一个测试类中获得 Spring @Value,但不能在其他测试类中获得 Spring @Value

java - 如何将 Python Script(py) 文件解析为 Java POJO?

junit5 - 如何使用 JUnit5 在 Micronaut 中的 Controller 测试中模拟服务类?

android - Android中带有标题的边框