Я думаю, что если сгенерированный код является очень детерминированным (и если посмотреть на ваш вопрос, он выглядит выглядит детерминированным), то я сначала вручную напишу правильный вывод строки из X и выполню сравнение строк,
Например, пример junit:
public void testX(){
X gnerator = new X(getTestMethodObject());
Assert.assertEquals(StringUtils.readFully(new File("expected_output.txt")), generator.generate());
}
Очевидно, что это будет выполнять сравнение строк, и когда сгенерированное содержимое изменится, вам придется вручную написать новый ожидаемый результат.Следовательно, хотя это и просто, но может в дальнейшем стать кошмаром обслуживания.
Другой способ, конечно, заключается в том, чтобы сгенерировать сгенерированный вывод и проверить сгенерированные токены (я предполагаю, что вы не можете скомпилировать сгенерированный код в своей тестовой среде).Скажем, http://code.google.com/p/java-lexer/, который является действительно простым лексором (я не ручаюсь за это - я просто нашел его за пару минут поиска в Google ... но у него есть некоторые базовые тесты , так что яПредположим, это хорошо?).Или используйте что-то более сложное , например antlr , что, вероятно, излишне для тестирования.
Лично я бы остановился на сравнении ожидаемого результата, написанного от руки, с генерируемым результатом.Его гораздо более низкий ключ, и он легче обнаруживает ошибки, чем использование полноценных лексоров.