java - AssertThat 在日期比较中的用法

标签 java assertj

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

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”不在列表中。

enter image description here

最佳答案

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

// 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));

第二个断言会得到更好的错误消息,它会显示错误的日期。

关于java - AssertThat 在日期比较中的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42305928/

相关文章:

java - AssertJ 断言抛出异常或结果

java - 从 throwable 获取正文详细信息,并断言抛出异常时返回了确切的消息

java - 当对话框不可见时,JScrollBar setValue 不起作用

java - Stellar 支付代码在 Java 中不起作用

java - 为什么 BufferedWriter 不写入文件?

java - 在 maven 中运行测试不清理 DBUNIT 数据库

java - Netbeans 在保存后不应用更改

assertj - 如何否定 AssertJ 中的断言?

java - Restful BDD : How to loop on Steps with Soft Assertions

java - Assertj 3.16.1 中是否弃用了方法 "hasOnlyElementsOfType"