我想针对日期搜索编写一个测试。我正在考虑类似的测试代码
assertThat(repository.findByBookingDateAfter(LocalDate.of(2016, 1, 1))).extracting("bookingDate").are(...));
Run Code Online (Sandbox Code Playgroud)
其中类结构如下所示:
public class Booking{
...
LocalDate bookingDate;
...
}
Run Code Online (Sandbox Code Playgroud)
因为查询是针对给定日期之后的任何预订,所以我的测试将检查该字段确实晚于该日期。经过一番网上搜索,我没有看到任何有用的信息。我想知道我是否走在正确的道路上。
有什么建议么?
更新:
后来,我在 build.gradle 文件中更改了依赖项设置,如下所示:
testCompile('org.springframework.boot:spring-boot-starter-test'){
exclude group: 'org.assertj'
}
testCompile group: 'org.assertj', name: 'assertj-core', version: '3.6.2'
Run Code Online (Sandbox Code Playgroud)
拥有最新版本的assertj。
更新2:
以下是所有以“is”开头的方法的屏幕截图。“isAfter”不在列表中。
我将使用allMatch或allSatisfy断言来检查每个提取的日期是否在查询中使用的日期之后。
// set the extracted type to chain LocalDate assertion
assertThat(result).extracting("bookingDate", LocalDate.class)
.allMatch(localDate -> localDate.isAfter(queryDate)));
Run Code Online (Sandbox Code Playgroud)
或者
// use a lambda to extract the LocalDate to chain LocalDate assertion
assertThat(result).extracting(Booking::getBookingDate)
.allSatisfy(localDate -> assertThat(localDate).isAfter(queryDate));
Run Code Online (Sandbox Code Playgroud)
通过第二个断言,您会得到更好的错误消息,它将显示错误的日期。