3

我想针对带有日期的搜索编写一个测试。我正在考虑类似的测试代码

assertThat(repository.findByBookingDateAfter(LocalDate.of(2016, 1, 1))).extracting("bookingDate").are(...));

其中类结构类似于以下内容:

public class Booking{
  ...
  LocalDate bookingDate;
  ...
}

因为查询是在给定日期之后的任何预订上进行的,所以我的测试将检查该字段确实晚于该日期。经过一些在线搜索,我没有看到任何有用的信息。我想知道我是否走在正确的轨道上。

有什么建议么?

更新:

后来,我在 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'

拥有最新版本的assertj。

更新 2:

以下是任何以“is”开头的方法的屏幕截图。“isAfter”不在列表中。

在此处输入图像描述

4

1 回答 1

5

我会使用allMatchorallSatisfy断言来检查每个提取的日期是否在查询中使用的日期之后。

// set the extracted type to chain LocalDate assertion 
assertThat(result).extracting("bookingDate", LocalDate.class)
                  .allMatch(localDate -> localDate.isAfter(queryDate)));

或者

// use a lambda to extract the LocalDate to chain LocalDate assertion
assertThat(result).extracting(Booking::getBookingDate)
                  .allSatisfy(localDate -> assertThat(localDate).isAfter(queryDate));

您会通过第二个断言获得更好的错误消息,它将显示错误日期。

于 2017-02-18T22:39:37.187 回答