【问题标题】:Is it possible to exclude some fields from assertJ usingFieldByFieldElementComparator?是否可以使用FieldByFieldElementComparator从assertJ中排除某些字段?
【发布时间】:2018-03-23 10:42:04
【问题描述】:

如何实现以下:

List<Data> streams = new ArrayList<>();
assertThat(streams).usingFieldByFieldElementComparatorIgnoringGivenFields("createdOn").containsOnly(data1, data2);

【问题讨论】:

    标签: java assertions assertj


    【解决方案1】:

    使用与ListAssert.usingFieldByFieldElementComparator() 执行相同操作的ListAssert.usingElementComparatorIgnoringFields(String... fields),但允许忽略某些字段/属性:

    按字段/属性比较所有字段/属性 除了给定的字段/属性

    所以你可以写:

    List<Data> streams = new ArrayList<>();
    //...
    Assertions.assertThat(streams)
              .usingElementComparatorIgnoringFields("createdOn")
              .containsOnly(data1, data2);
    

    【讨论】:

    • 您建议的上述代码格式是否可以将 Date() 的比较放宽 1000ms(isCloseTo 操作)?
    • @Vel Ganesh 欢迎您。我认为这个 AssertJ 比较器不可能。对于此类要求,我通常将其从 AssertJ 比较中排除,并使用 JUnit 断言执行它,例如:Assert.assertTrue(date.after(lowerLimitDate) &amp;&amp; date.before(upperLimitDate));
    • 无论出于什么奇怪的原因,我都遇到了麻烦,但使用 usingElementComparatorOnFields("foo", "bar") 非常有用。
    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多