Java 如何比较JUnit5中包含另一个列表的列表?
我有以下三个班:Java 如何比较JUnit5中包含另一个列表的列表?,java,unit-testing,junit5,hamcrest,Java,Unit Testing,Junit5,Hamcrest,我有以下三个班: public class Foo { private Long fooId; private String fooName; private List<Bar> bars; } public class Bar { private Long barId; private String barName; private Foo foo; } public class FooBar { List<Foo> foo;
public class Foo {
private Long fooId;
private String fooName;
private List<Bar> bars;
}
public class Bar {
private Long barId;
private String barName;
private Foo foo;
}
public class FooBar {
List<Foo> foo;
List<Bar> bars;
}
公共类Foo{
私人长食物;
私有字符串名称;
私人酒吧名单;
}
公共类酒吧{
私人长巴里德;
私有字符串barName;
私人富福;
}
公共级FooBar{
罗列富;
列表栏;
}
FooBar
是我在回复中得到的。我对如何进行比较有点困惑,尤其是使用hamcrest.Matchers.*
的hasItem()
,还是有更好的方法。我们如何在Junit5中比较这一点?首先,您的Foo
和Bar
应该有一些共同点,作为比较的基础,通过它们可以进行比较
如果他们没有任何共同点,我看不到任何方法来比较无与伦比的对象
只要您的Foo
和Bar
有共同之处,或者至少它们覆盖了.equals()
,并实现了它们自己的功能,可以对这两种类型进行比较(可以相互比较这两种类型),您就可以使用:
assertIterableEquals(expected, actual); //from org.junit.jupiter.api.Assertions
此方法断言两个可数是否完全相等
请注意,如果预期值和实际值都为空,则认为它们相等。只有当它们都为空时,
foo
才会等于bar
。由于foo
是foo
的集合,Bar
是Bar
的集合,并且两者都扩展了对象
,因此这些集合没有其他方法可以相等。如果唯一的目标是确定它们是否都是null
@JeffScottBrown,那么就没有理由使用assertetableequals
,你的意思是它们应该从某个公共超类型实现.equals()
-不。我的意思是在这种情况下没有很好的理由使用assertetableequals
。但是为什么呢?列表实现了集合,集合具有等于。“我不明白这为什么行不通。”杰夫斯科特布朗是乔治的原始例子: