我有一个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>
答案 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 。在处理测试用例时我也遇到了类似的问题。