通过内容相等行为创建对象表达式

create object expressions with by content equality behavior

我想使用对象表达式创建动态对象,但我想通过它们的内容来比较它们。有没有一种简单的方法可以在不实现 equalshashCode 的情况下编写它?

为了使其更具体,使该测试的断言通过的最小更改是什么?

@Test
fun `an object comparison test`() {
    val obj1 = object {
        val x = 1
    }
    val obj2 = object {
        val x = 1
    }

    assertEquals<Any>(obj1, obj2)
}

如果不实施相应的 equals(至少),它们将永远不相等。这就是您创建的每个 objectinstance 的本质。例外情况是 data class 个实例,它们实际上已经为您提供了适当的 equals()/hashCode()

所以

data class Some(val value : String)

println(Some("one") == Some("one"))

实际上会打印 true,即使这是两个不同的实例。

最简单的可能是提供您自己的断言函数(可能通过反射或不通过反射),或者如果您的测试框架提供它,则使用反射断言等于方法。 在后一种情况下,您可能对以下内容感兴趣:How do I assert equality on two classes without an equals method?