通过内容相等行为创建对象表达式
create object expressions with by content equality behavior
我想使用对象表达式创建动态对象,但我想通过它们的内容来比较它们。有没有一种简单的方法可以在不实现 equals
和 hashCode
的情况下编写它?
为了使其更具体,使该测试的断言通过的最小更改是什么?
@Test
fun `an object comparison test`() {
val obj1 = object {
val x = 1
}
val obj2 = object {
val x = 1
}
assertEquals<Any>(obj1, obj2)
}
如果不实施相应的 equals
(至少),它们将永远不相等。这就是您创建的每个 object
或 instance
的本质。例外情况是 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?
我想使用对象表达式创建动态对象,但我想通过它们的内容来比较它们。有没有一种简单的方法可以在不实现 equals
和 hashCode
的情况下编写它?
为了使其更具体,使该测试的断言通过的最小更改是什么?
@Test
fun `an object comparison test`() {
val obj1 = object {
val x = 1
}
val obj2 = object {
val x = 1
}
assertEquals<Any>(obj1, obj2)
}
如果不实施相应的 equals
(至少),它们将永远不相等。这就是您创建的每个 object
或 instance
的本质。例外情况是 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?