我正在学习如何处理 java 14(预览版)文本块。在 Junit 测试中使用以下文本块时,我遇到了以下意外功能(简化代码示例,在实际测试中我使用 HTML 片段):
assertEquals("""
test""", "test");
执行此测试会导致错误,因为"\r\ntest"
不匹配"test"
:
org.junit.ComparisonFailure: expected:<[
]test> but was:<[]test>
当我查阅文档(https://docs.oracle.com/javase/specs/jls/se14/preview/specs/text-blocks-jls.html)时,它字面意思是:
文本块的内容是紧接在开始定界符的行终止符之后开始并在结束定界符的第一个双引号之前结束的字符序列。
我错过了什么?
几个问题和建议后更新:
我创建了一个小测试类:
public class Tester {
public static void main(String[] args) {
System.out.println(">>" + """
test""");
}
}
它在执行时打印以下内容:
>>
test
这个类的字节码是
Compiled from "Tester.java"
public class nl.paul.testapp.testutil.Tester {
public nl.paul.testapp.testutil.Tester();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #7 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #13 // String >>test
5: invokevirtual #15 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}