我想使用对象表达式创建即时对象,但我想通过它们的内容进行比较。有没有实现equals
和hashCode
的简单方法?
更具体地讲,使此测试通过的最小更改是什么?
@Test
fun `an object comparison test`() {
val obj1 = object {
val x = 1
}
val obj2 = object {
val x = 1
}
assertEquals<Any>(obj1, obj2)
}
答案 0 :(得分:1)
(至少)没有实现相应的equals
,它们将永远不相等。这就是您创建的每个object
或instance
的本质。例外情况是data class
个实例,它们实际上已经为您提供了适当的equals()
/ hashCode()
。
所以
data class Some(val value : String)
println(Some("one") == Some("one"))
实际上将打印true
,即使这是两个不同的实例。
最简单的方法可能是提供您自己的断言函数(可能通过反射或不通过反射),或者如果测试框架提供了此方法,则使用反射断言equals-method。 在后一种情况下,以下内容可能对您很有趣:How do I assert equality on two classes without an equals method?