【问题标题】:Assert RestAssured response body with Regex使用正则表达式断言 RestAssured 响应正文
【发布时间】:2018-06-06 09:48:03
【问题描述】:

我正在尝试使用 RestAssured 在 json 响应正文中声明一个时间戳字段,作为我的集成测试的一部分。我不确定哪个是执行正则表达式匹配的正确方法

这是 json 响应:

{
"timestamp": "2018-06-05T23:56:09.653+0000",
"status": 200,
"error": "None",
"message": "None"
}

这是我的 RestAssured 响应断言的代码

String pattern = "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}(\\+|\\-)\\d{4}$";
Pattern r = Pattern.compile(pattern);
response.then().assertThat()
    .body("timestamp", matchesPattern(pattern)) //<= ERROR HERE
    .body("status", equalTo(999))
    .body("error", containsString("None"))
    .body("message", containsString("None"));

当我编译上述代码时,我在验证时间戳模式时遇到错误

  required: java.lang.String,java.lang.CharSequence
  found: java.lang.String
  reason: actual and formal argument lists differ in length

我不确定 hamcrest 中将支持哪种方法进行正则表达式模式检查。

【问题讨论】:

  • @ScaryWombat,不起作用。我在matchesPattern(..) 中尝试过patternr
  • 看起来我没有添加正确的依赖项。我的 hamcrest 是 1.3,不支持这个
  • @ScaryWombat,我已经回答了我的问题。谢谢你的线索:-)
  • 很高兴它对你有用

标签: java regex junit rest-assured hamcrest


【解决方案1】:

这里的问题是我的项目中没有正确的依赖项。 org.hamcrest.core 没有 matchesPattern 的方法。添加以下依赖项后,以下导入工作

<!-- https://mvnrepository.com/artifact/org.hamcrest/java-hamcrest -->
<dependency>
  <groupId>org.hamcrest</groupId>
  <artifactId>java-hamcrest</artifactId>
  <version>2.0.0.0</version>
  <scope>test</scope>
</dependency>

您需要导入以下代码

import static org.hamcrest.text.MatchesPattern.matchesPattern;

【讨论】:

  • 我的编辑器将“MatchesPattern”粘贴进去时变成红色。在 2019 年,我如何 assertThat 字符串匹配模式?
  • 只是一个线索:使用MatchesPattern 查看代码的导入部分。你导入的是正确的吗?
  • 我的其他 hamcrest 东西可以正确导入。我可以import static org.hamcrest.text,但不能MatchesPattern
猜你喜欢
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多