【问题标题】:AssertJ: Assert if list is sorted inversely or in descending orderAssertJ:断言列表是否按逆序或降序排序
【发布时间】:2017-12-13 11:46:32
【问题描述】:

我正在使用 AssertJ 进行测试,我注意到有一种方法可以检查 List<T> 是否已排序:

public static <T> void sorted(final List<T> actual) {
    try {
        assertThat(actual).isSorted();
    } catch (AssertionError e) {
        LOGGER.error(e.getMessage(), e);
        throw e;
    }
}

有没有办法检查列表是否按降序排序?

我知道 guava 提供了Ordering.natural().reverse().isOrdered(values),但我想利用 AssertJ 的断言消息,因为它确实对调试有很大帮助,例如

group is not sorted because element 5:
 <"4000366190001391">
is not less or equal than element 6:
 <"4000206280001394">
group was:
 <["4000206280001363",
    "4000206280001364",
    "4000206280001365",
    "4000206280001373",
    "4000206280001388",
    "4000366190001391",
    "4000206280001394",
    "4000366190001401",
    "4000206280001403",
    "4000206280001405",
     ....]>

【问题讨论】:

    标签: java list sorting assertj


    【解决方案1】:

    是的。还有isSortedAccordingTo 方法,它采用Comparator

    您需要将泛型类型参数更改为&lt;T extends Comparable&lt;T&gt;&gt;,即具有自然顺序的类型。然后Comparator.reverseOrder() 可以用来断言它应该是它的自然顺序的逆。如果没有该约束,您将尝试反转一些未知/未指定的顺序,这会导致编译器错误。

    public static <T extends Comparable<T>> void sorted(final List<T> actual) {
        try {
            assertThat(actual).isSortedAccordingTo(Comparator.reverseOrder());
        } catch (AssertionError e) {
            LOGGER.error(e.getMessage(), e);
            throw e;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2018-05-03
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多