我有一个JAVA类 NoName ,其对象的方法是 getProperties()。此方法返回 Property 的数组。 当我现在有两个 NoName 的实例时,如何使用 assertEquals 来检查两个实例的 Property -Arrays是否相同?
_assertEquals(inst.getProperties(), ance.getProrties())_
将无法胜任,因为它已被弃用。
由于 NoName 类是一个库类,我不能覆盖 equals()(这似乎是这类问题的常用解决方案,就我而言读到现在。)
提前致谢。
答案 0 :(得分:4)
assertThat(ob1.getProperties(),
IsArrayContainingInOrder.contains(obj2.getProperties));
这是使用Hamcrest匹配器,我认为这是一种更好的断言方法,因为失败时的输出更具描述性。
如果订单无关紧要,还有一个IsArrayContainingInAnyOrder
。
答案 1 :(得分:1)
由于您正在讨论比较对象的内部结构,您可以覆盖equals
类的NoName
方法,并在其中比较两个对象的属性数组。但是,您还需要处理hashCode
方法。
或者,您可以在hasSameProperties(NoName obj)
类中创建辅助方法NoName
,并在比较两个对象的属性数组后使该方法返回布尔标志。然后在JUnit中,您只需使用assertTrue
方法。
答案 2 :(得分:0)
Property[] one = inst.getProperties(), two = ance.getProperties();
assertEquals(one.length, two.length);
for (int i=0; i<one.length; i++) assertEquals("index #" + i, one[i], two[i]);
这提供了基本的擦洗。如果您担心其他一些边缘条件(例如,类似于数组可能为null,或者只要每个数组都包含相同的元素,则允许数组具有不同的顺序),那么将需要一些额外的工作(例如,空检查,Property
实现Comparable
时的排序。)
答案 3 :(得分:0)
Hamcrest 1.3使用略有不同的语法,例如:
{{1}}