java - Hamcrest-Date 和 DateTimeFormatter 让您放心

标签 java api date junit hamcrest

我有一个放心测试,我试图验证响应中的日期是否在传入的日期参数之间。我正在尝试使用 Hamcrest-Date,但我的 json 响应中传回的日期位于 yyyy- MM-dd 和 Hamcrest-Date 似乎是日、日期、月、年。我无法在主体断言中使用 .format(DateTimeFormatter.BASIC_ISO_DATE) 因为 DateTimeFormatter 将其转换为字符串而 Hamcrest-Date 似乎不支持它。这怎么行?

这是代码中的错误:

“DateMatchers 类型中的方法 sameOrBefore(Date) 不适用于参数 (String)”

        ValidatableResponse vr = given().

                param("startDate", LocalDate.now().minusMonths(1).format(DateTimeFormatter.BASIC_ISO_DATE)).
                param("endDate", LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE)).
                pathParam("accountid", accountId_DP).

                header("trace-id", UUID.randomUUID().toString()).
                header("organization", ORGANIZATION).
                header("session-id", SESSION_ID_734548).
                when().
                get("/transactions/{accountid}/pra").           
                then();

        LOGGER.info("test prefix to find in console {}", vr.extract().response().getBody().asString());

        vr.assertThat().statusCode(200).
        and().contentType(ContentType.JSON).
        and().
        body("transactions.postedDate.toString()", everyItem(DateMatchers.sameOrBefore(LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE)))).
        and().
        extract().
        response();

    }

最佳答案

回答我自己的问题,以防有人遇到这个问题。我发现的答案是不使用 Hamcrest-Date,而是使用 Hamcrest Matcher lessThanOrEqualTo/greaterThanOrEqualTo


        ValidatableResponse vr = given().

                param("startDate", LocalDate.now().minusMonths(1).format(DateTimeFormatter.BASIC_ISO_DATE)).
                param("endDate", LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE)).
                pathParam("accountid", accountId_DP).

                header("trace-id", UUID.randomUUID().toString()).
                header("organization", ORGANIZATION).
                header("session-id", SESSION_ID_734548).
                when().
                get("/transactions/{accountid}/pra").           
                then();

        LOGGER.info("testPRAStartDateEndDate test prefix to find in console {}", vr.extract().response().getBody().asString());

        vr.assertThat().statusCode(200).
        and().contentType(ContentType.JSON).
        and().
        body("transactions.postedDate", everyItem(greaterThanOrEqualTo(LocalDate.now().minusMonths(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))))).
        body("transactions.postedDate", everyItem(lessThanOrEqualTo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))))).
        and().
        extract().
        response();

关于java - Hamcrest-Date 和 DateTimeFormatter 让您放心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61147315/

相关文章:

javascript - React Axios - JSON Get 响应未从 render() 显示 - Riot API

asp.net-mvc - 将 c# Datetime 转换为输入 [type=date]

java - 记事本到HashMap-Java

java - 如何从 Java 中的枚举返回一个对象?

api - youtube API 3 - 在单个请求中获取所有数据

mysql - 如何在不使用 now() 的情况下在特定时间段内过滤 mysql 中的 select 语句

java - 如何从日志文件中打印出特定日期之间的字符串

java - Hazelcast IMDG 字符串到 HazelcastJsonValue 问题

java - GetMap() 在使用 Google Maps API v2 的 Android 上返回 null

android - android 3 (API <=11) 组件中的新可选 TextView