我正在使用 JUnit 框架从 Java 中的某种编程语言为解释器编写测试。为此,我创建了大量的测试用例,其中大多数包含正在测试的语言的代码片段。由于这些片段通常很小,因此将它们嵌入到 Java 代码中很方便。但是,Java 不支持多行字符串文字,由于转义序列和拆分较长字符串文字的必要性,这使得代码片段有点模糊,例如:
String output = run("let a := 21;\n" +
"let b := 21;\n" +
"print a + b;");
assertEquals(output, "42");
理想情况下,我想要类似的东西:
String output = run("""
let a := 21;
let b := 21;
print a + b;
""");
assertEquals(output, "42");
一种可能的解决方案是将代码片段移动到外部文件,并从相应的测试用例中引用每个文件。然而,这增加了显着的维护负担。
另一种解决方案是使用不同的 JVM 语言(例如支持多行字符串文字的 Scala 或 Jython)来编写测试。这将为项目添加一个新的依赖项,并且需要移植现有的测试。
有没有其他方法可以在不增加太多维护的同时保持测试代码片段的清晰性?