我发现了许多关于比较List对象的问题和答案,无论它们的元素顺序如何,但我的问题更复杂:我有两个bean,其中包含一个List。我想执行两个bean的assertEquals,而不管内部列表中元素的顺序如何。有一种简单的方法可以做到这一点吗?
答案 0 :(得分:0)
我猜你可以找到答案here。想法是使用hamcrest断言。
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
import static org.junit.Assert.assertThat;
public class CompareListTest {
@Test
public void compareList() {
List<String> expected = Arrays.asList("String A", "String B");
List<String> actual = Arrays.asList("String B", "String A");
assertThat("List equality without order",
actual, containsInAnyOrder(expected.toArray()));
}
}
答案 1 :(得分:0)
当你做assertEquals(expectedObject,actualObject)在场景后面,junit实际上调用了对象的相等方法。所以我的建议是,如果你覆盖你的平等方法,那么你可以实现你期望的。
assertEqual背后的逻辑。
String expectedString = String.valueOf(expected);
String actualString = String.valueOf(actual);
if (expectedString.equals(actualString)) {
return formatted + "expected: "
+ formatClassAndValue(expected, expectedString)
+ " but was: " + formatClassAndValue(actual, actualString);
} else {
return formatted + "expected:<" + expectedString + "> but was:<"
+ actualString + ">";
}
或Apache util可用于检查两个对象,而没有相同的方法覆盖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
API
EqualsBuilder.reflectionEquals( obj1, obj2 )