【问题标题】:How to compare a list containing another list in junit 5?如何比较包含junit 5中另一个列表的列表?
【发布时间】:2020-08-31 16:11:18
【问题描述】:

我有如下三个班级:

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

FooBar 是我在回复中得到的。我对如何比较有点困惑,尤其是Foo 使用hasItem()hamcrest.Matchers.* 或者有没有更好的方法。我们如何在 Junit5 中进行比较?

【问题讨论】:

    标签: java unit-testing junit5 hamcrest


    【解决方案1】:

    首先,你的FooBar应该有一些共同点,一个比较的基础,通过它可以比较它们。

    如果它们没有任何共同点,我看不出有任何方法可以比较无与伦比的对象。

    只要您的FooBar 有共同点,或者至少它们覆盖.equals() 并实现自己的可以比较这两种类型(可以相互比较这两种类型),您就可以使用:

    assertIterableEquals(expected, actual); //from org.junit.jupiter.api.Assertions
    

    此方法断言两个可迭代对象是否深度相等。

    注意,如果 expectedactual 都是空值,它们被认为是相等的。

    【讨论】:

    • foo 等于 bars 的唯一时间是它们都是 null。由于fooFoo 的集合,barsBar 的集合,并且都扩展Object,因此没有其他方法可以使这些集合相等。如果唯一的目标是确定它们是否都是null,则没有理由使用assertIterableEquals
    • @JeffScottBrown 你的意思是他们应该从一些常见的超类型中实现.equals() 吗?
    • “你的意思是他们应该从一些常见的超类型中实现 .equals() 吗?” - 不。我的意思是在这种情况下没有充分的理由使用assertIterableEquals
    • 但是为什么呢? List实现了Collection,Collection有equals。我不明白为什么这不起作用。
    • @JeffScottBrown Giorgi 的粗略例子:ideone.com/MIKqUq
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2017-01-03
    相关资源
    最近更新 更多