Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit:比较包含列表的两个bean,而不考虑列表顺序_Java_List_Junit_Comparison - Fatal编程技术网

Java JUnit:比较包含列表的两个bean,而不考虑列表顺序

Java JUnit:比较包含列表的两个bean,而不考虑列表顺序,java,list,junit,comparison,Java,List,Junit,Comparison,我发现了很多关于比较列表对象的问题和答案,而不管它们的元素顺序如何,但我的问题更复杂:我有两个bean,其中包含一个列表。我想执行两个bean的assertEquals,而不管内部列表中元素的顺序如何。有什么简单的方法可以做到这一点吗?我想你可以找到答案。其想法是使用hamcrest断言 import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; import static or

我发现了很多关于比较列表对象的问题和答案,而不管它们的元素顺序如何,但我的问题更复杂:我有两个bean,其中包含一个列表。我想执行两个bean的assertEquals,而不管内部列表中元素的顺序如何。有什么简单的方法可以做到这一点吗?

我想你可以找到答案。其想法是使用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()));
    }

}
导入静态org.hamcrest.collection.isiterablecaininganyorder.containsInAnyOrder;
导入静态org.junit.Assert.assertThat;
公共类比较测试{
@试验
公共无效比较列表(){
预期列表=Arrays.asList(“字符串A”、“字符串B”);
List-actual=Arrays.asList(“字符串B”、“字符串A”);
断言(“列出无顺序的相等项”,
实际,包含任何订单(预期为.toArray());
}
}

我想你能找到答案。其想法是使用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()));
    }

}
导入静态org.hamcrest.collection.isiterablecaininganyorder.containsInAnyOrder;
导入静态org.junit.Assert.assertThat;
公共类比较测试{
@试验
公共无效比较列表(){
预期列表=Arrays.asList(“字符串A”、“字符串B”);
List-actual=Arrays.asList(“字符串B”、“字符串A”);
断言(“列出无顺序的相等项”,
实际,包含任何订单(预期为.toArray());
}
}
当您在幕后执行assertEquals(expectedObject,actualObject)时,junit实际上调用了object的equal方法。因此,我的建议是,如果您重写equal方法,那么您就可以实现您的期望

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 + ">";
        }
当您在幕后执行assertEquals(expectedObject,actualObject)时,junit实际上调用对象的equal方法。因此,我的建议是,如果您重写equal方法,那么您就可以实现您所期望的

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 + ">";
        }

不,我不想比较两个列表:我想比较两个同时包含列表和其他属性的bean。@Pino抱歉误解。如果您添加一些代码以更好地了解您的情况,那将非常好。不,我不想比较两个列表:我想比较两个同时包含列表和其他属性的bean。@Pino很抱歉误解。如果您添加一些代码以更好地了解您的情况,那将是非常棒的。是的,我知道。如果不改变equals()?任何“智能”库?@Pino你可以看看它有很多很酷的API方法用于此目的。是的,我知道。如果不改变equals()?任何“智能”库?@Pino你可以看看它有很多很酷的API方法。