带有斜杠的Hamcrest匹配器被解释为验证的一部分

时间:2015-08-21 11:19:59

标签: java hamcrest rest-assured

我有以下验证,我必须检查返回的body是否包含一个包含"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, ...}

3 个答案:

答案 0 :(得分:1)

我认为逃避斜线有问题。所以我用过:

assertTrue(response.contains("\"id\":6354"));

答案 1 :(得分:1)

Hamcrest containsString似乎在输出错误消息中打印转义的字符,但是在进行匹配时似乎正确地转义了它们。

在我的示例中,我错误地添加了空格,因此请遵循问题中的示例: "id": 6354会给出错误Expected: a string containing "\"id\": 6354",但是当我将其更改为"id":6354"时,它通过了断言。

答案 2 :(得分:0)

我有一个类似看似令人困惑的问题,但解决方案很简单。我正在将非String对象与String进行比较,因此失败了。之所以引起混淆,是因为非String对象的描述看起来像没有转义字符的String。

为了解决这个问题,我改变了:

assertThat(message, is(expectedLog));

为:

assertThat(message.toString(), is(expectedLog));