我知道这个问题曾经被问过。但是,没有一种解决方案对我有用。 我有一个由3个类组成的用户定义类。 看起来像这样:
Class compositeClass
{
UserDefinedClass1 useClass1;
UserDefinedClass2 useClass2;
UserDefinedClass3 useClass3;
}
我有一个测试方法,我需要比较这些复合类的列表。 我已经尝试过像这样的Assert equals的几种变体: Hamcrest:
Assert.assertThat(mockCompositeList().getStandardLoadComposites(),
equalTo(closeRequest.getStandardLoadComposites()));
Assert.assertArrayEquals(mockCompositeList().getStandardLoadComposites().toArray(),
closeRequest.getStandardLoadComposites().toArray());
两个实例均返回此AssertionError:
预期
似乎正在比较参考而不是对象中的值。
我是否必须重写equals
运算符才能使其与用户定义对象的对象中的值进行比较?
答案 0 :(得分:0)
考虑比较列表中的对象,而不是比较列表本身。我假设您创建了一个模拟列表,以声明预期结果,对于实际结果(列表),要测试的方法将使用<创建新列表strong>新。 无论如何,此equals方法将比较三个对象的ID并在覆盖后返回true。但是请考虑覆盖equals和hash方法只是为了使您的断言正常工作。
两个列表不必是同一列表,但是您创建并传递给类的模拟对象在某些时候不应更改。如果这是您要在测试中确定的内容,则可以比较列表中的对象会为你做的。
答案 1 :(得分:0)
感谢您的回复。 我所做的是创建一个比较列表中值的辅助方法。当只在类中设置了3个值时,为复合类覆盖equals运算符会很麻烦。因此,我比较了列表中每个对象的值,并根据比较结果返回了true / false。然后在断言等于中使用该方法并比较布尔值。