JUnit - 字符串检查因\ n而失败

时间:2015-09-06 15:27:14

标签: java string testing junit console

我有一个JUnit测试用例,其中检查了文本块。有硬编码的“正确”值:

String CORRECT_VAL = "First\\nSecond";

json是这样生成的:

String json =
            "{\n" +
            "    \"val\":\"" + CORRECT_VAL + "\",\n" +
            "}";

此字符串由org.json转换为JSONObject。但随后测试失败了:

expected:<First[\r\n]Second> but was:<First[
]Second>

所以我也在控制台中看到了“\ n”。 :(

评论尝试1“:

expected:<First\[\]nSecond> but was:<First\[]nSecond>
Expected :First\\nSecond
Actual   :First\nSecond

评论尝试2“:

expected:<First[\r\n]Second> but was:<First[
]Second>

3 个答案:

答案 0 :(得分:2)

\是一个特殊符号,用于标记某些特殊字符:

例如,

\n将被转换为换行符。

\\意味着转义反斜杠,因此它将转换为单个反斜杠。因为一个反斜杠是一个特殊的符号,如果你想在java代码中写一个实际的反斜杠,你需要这样做。 (当从文件中读取时,只有在代码中写入时才会发生整件事。)

\\n字面意思是“反斜杠,后跟'n'”。没有换行符。

因此,你要么在结果中要求正确的字符,要么在你的json中写出正确的字符。目前,您正在将“\n”(换行符)与“\\n”(反斜杠,后跟n)进行比较。或者,在您的另一个示例中,“\n”(换行符)带有“\\\\n”(两个反斜杠,后跟一个n)。

您的信息告诉您的是,您正在进行此项检查:

 Assert.assertEquals("First\\r\\nSecond", "First\r\nSecond");

......或许这......

 Assert.assertEquals("First\\r\\nSecond", "First\nSecond");

换句话说,期望的字符串有“\ r \ n”(四个字符),而实际的字符串有某种实际的换行符,例如'\ r'+'\ n'(cariage return,follow通过换行符)(两个字符)。

你期待TEXT,字面意思是“\ r \ n”。但你得到的可能就是SYMBOL,它由'\ r'后跟符号'\ n'表示,这将导致实际的换行符。

答案 1 :(得分:0)

我在测试类本身中创建了json字符串,所以我使用了<div class="row" style="text-align:center;"> ,因为First\\nSecond必须在json字符串中进行转义。

但我也检查过结果是\n,但这是错误的。

插入JSON:First\\nSecond
检查:First\\nSecond

使用commons-lang3:
First\nSecond

答案 2 :(得分:0)

问题在于 \ r 而不是 \ n 。在处理测试用例时我也遇到了类似的问题。