java AssertJ:如果列表是反向排序或降序排序,则Assert

dldeef67  于 2023-03-16  发布在  Java
关注(0)|答案(2)|浏览(141)

我在测试中使用了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的assert消息,因为它在调试方面确实有很大帮助。

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",
     ....]>
nbysray5

nbysray51#

是的,还有一个方法isSortedAccordingTo,它接受一个Comparator.
你需要将泛型类型参数改为<T extends Comparable<T>>,即一个具有自然排序的类型。那么Comparator.reverseOrder()可以说是用来Assert它应该是其自然排序的反向。如果没有这个约束,你将试图反转一些未知的/未指定的排序,这将导致编译器错误。

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

avkwfej42#

assertThat(downloadHistory).extracting("downloadedAt", LocalDateTime.class)
                .isSortedAccordingTo(Comparator.reverseOrder());

相关问题