Java 带有斜线的Hamcrest matcher被解释为验证的一部分
我有以下验证,其中我必须检查返回的主体是否有一个包含Java 带有斜线的Hamcrest matcher被解释为验证的一部分,java,hamcrest,rest-assured,Java,Hamcrest,Rest Assured,我有以下验证,其中我必须检查返回的主体是否有一个包含“id”的字符串:6354,但它解释特殊字符的斜杠。如何验证包含双引号的字符串 代码 import static org.hamcrest.Matchers.containsString; import com.jayway.restassured.response.Response; response.then() .body(containsString("\"id\": 6354")); 错误 Res
“id”的字符串:6354
,但它解释特殊字符的斜杠。如何验证包含双引号的字符串
代码
import static org.hamcrest.Matchers.containsString;
import com.jayway.restassured.response.Response;
response.then()
.body(containsString("\"id\": 6354"));
错误
Response body doesn't match expectation.
Expected: a string containing "\"id\": 6354"
Actual: {...,"id": 6354, ...}
我认为逃生斜线有问题。所以我用了:
assertTrue(response.contains("\"id\":6354"));
我有一个类似的看似困惑的问题,但解决方法很简单。我将非字符串对象与字符串进行比较,因此失败。这种混淆是因为非字符串对象的描述看起来像一个没有转义字符的字符串 为了解决这个问题,我改变了:
assertThat(message, is(expectedLog));
致:
Hamcrest containsString似乎在输出错误消息中打印转义字符,但在进行匹配时,它似乎正确地转义了这些字符 在我的示例中,我错误地添加了空格,因此遵循问题中的示例:
“id”:6354
将给出错误预期值:一个包含“\”id\“:6354”
的字符串,但是当我将其更改为“id”:6354时“
,它通过了断言。containssString的代码是什么?@NiklasP我已经更新了问题,你能提供一个JSON文档的示例吗?你是如何解决的?得到了同样的问题我在这里经历了同样的行为,实际匹配工作正常,即使输出错误消息打印转义字符;作为参考,我使用Hamcrest 1.3。也许这种行为在新版本中有所不同?
assertThat(message.toString(), is(expectedLog));