Пишу тесты для интерпретатора с какого-то языка программирования на Java с использованием JUnit framework. С этой целью я создал большое количество тестовых примеров, большинство из которых содержат фрагменты кода на тестируемом языке. Поскольку эти фрагменты обычно небольшие, их удобно встраивать в код 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, которые поддерживают многострочные строковые литералы, для написания тестов. Это добавит в проект новую зависимость и потребует переноса существующих тестов.
Есть ли другой способ сохранить ясность фрагментов тестового кода, не добавляя при этом слишком много обслуживания?