【发布时间】:2019-02-18 01:31:22
【问题描述】:
我知道以前有人问过这个问题。但是,没有一个解决方案对我有用。 我有一个用户定义的类,它是 3 个类的组合。 它看起来像这样:
Class compositeClass
{
UserDefinedClass1 useClass1;
UserDefinedClass2 useClass2;
UserDefinedClass3 useClass3;
}
我有一个测试方法,我需要比较这些复合类的列表。 我尝试了 Assert equals 的几种变体,如下所示: 汉克雷斯特:
Assert.assertThat(mockCompositeList().getStandardLoadComposites(),
equalTo(closeRequest.getStandardLoadComposites()));
Assert.assertArrayEquals(mockCompositeList().getStandardLoadComposites().toArray(),
closeRequest.getStandardLoadComposites().toArray());
两个实例都返回这个 AssertionError:
预期为
它似乎是在比较引用而不是对象中的值。
我是否必须重写 equals 运算符才能让它比较用户定义对象的对象中的值?
【问题讨论】:
-
Hamcrest 方法(来自stackoverflow.com/questions/33840531/…)是您之前尝试过的一些方法吗?
-
如果您确实尝试过(例如) containsInAnyOrder,什么不起作用(即,他们的结果与您的预期有何不同)。另外,你能确认你在你的类中覆盖了 equals() 和 hashcode() 吗?
-
抱歉 - 我刚刚重读了:
Do I have to override the equals operator to get it to compare the values in the objects of the user defined objects?是的,你必须重写 equals() - 并且每当你重写 equals() 时,你也应该重写 hashcode() (见 @987654322 @)