Java 使用AssertJ断言列表中的单个对象
我正在使用AssertJ库在测试中执行断言。在本例中,我想测试列表中的每个Java 使用AssertJ断言列表中的单个对象,java,unit-testing,junit,assertj,Java,Unit Testing,Junit,Assertj,我正在使用AssertJ库在测试中执行断言。在本例中,我想测试列表中的每个Date对象是否都在其他日期之后 因此,我显然可以做到以下几点: Date dateOne = new Date(someTimestamp); Date dateTwo = new Date(otherTimestamp); Assertions.assertThat(dateOne).isAfter(dateTwo); 毫无疑问 但如果我想测试列表中的每个元素,以确保它们都在给定的日期之后,该怎么办呢 Date
Date
对象是否都在其他日期之后
因此,我显然可以做到以下几点:
Date dateOne = new Date(someTimestamp);
Date dateTwo = new Date(otherTimestamp);
Assertions.assertThat(dateOne).isAfter(dateTwo);
毫无疑问
但如果我想测试列表中的每个元素,以确保它们都在给定的日期之后,该怎么办呢
Date dateOne = new Date(someTimestamp);
Date dateTwo = new Date(otherTimestamp);
Date dateThree = new Date(fooBarTimestamp);
List<Date> dates = Arrays.asList(dateOne, dateTwo);
//and here I want to make sure that all Dates in dates are after dateThree
但是比较器看起来非常整洁,最重要的是,我的SonarQube抱怨这个签名:
Condition<List<? extends Date>> allAfterDate(final Date dateToCompare) {...}
但我觉得这不可能使用大多数开发人员都非常喜欢的这种酷炫的AssertJ语法;-)
有没有一种方法可以让我做类似的事情
Assertions.assertThat(dates).everySingleElement().isAfter(dateThree);
如果这是不可能的,那么什么是最好和最干净的方法呢
(我知道我可以用//NOSONAR
压制声纳,我只是不想)
试试看:
希望它对您有所帮助,并且是一种足够酷的语法;-) 试试看:
希望它对您有所帮助,并且是一种足够酷的语法;-) 那么你的问题是什么?最好的方法是什么?如何修复您的问题?请注意有关泛型的警告?抱歉,已编辑,因此问题更清楚。我可以使用类似于断言.assertThat(dates.EverysingElement().isAfter(dateThree)的东西吗代码>或者如果不是,那么什么是最好的方法。那么你的问题是什么?最好的方法是什么?如何修复您的问题?请注意有关泛型的警告?抱歉,已编辑,因此问题更清楚。我可以使用类似于断言.assertThat(dates.EverysingElement().isAfter(dateThree)的东西吗代码>或者如果不是,那么最好的方法是什么。这很酷;-)在可读性方面比我做的要好得多。我发现我使用的是旧版本的AssertJ包。谢谢。这很酷;-)在可读性方面比我做的要好得多。我发现我使用的是旧版本的AssertJ包。谢谢
SoftAssertions assertions = new SoftAssertions();
dates.forEach( date -> {
assertions.assertThat(date).isAfter(dateThree);
});
assertions.assertAll();
Assertions.assertThat(dates).everySingleElement().isAfter(dateThree);
assertThat(dates).allSatisfy(date -> assertThat(date).isAfter(dateThree));