我找到了很多关于比较List对象的问题和答案,无论其元素的顺序如何,但我的问题更复杂:我有两个豆子,除其他属性外,还包含一个List。 我想执行两个 bean 的断言等于,而不管内部列表中元素的顺序如何。 有没有简单的方法可以做到这一点?
当你做断言等于(预期对象,实际对象(在幕后,junit实际上调用了对象的equal方法。所以我的建议是,如果你覆盖你的平等方法,那么你可以实现你所期望的。
断言等于背后的逻辑。
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 实用程序可用于检查两个对象而无需相等的方法覆盖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
应用程序接口
EqualsBuilder.reflectionEquals( obj1, obj2 )
我想你可以在这里找到答案。这个想法是使用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()));
}
}