В этот уик-энд я написал парсер для нетривиального языка. Некоторые из результатов могут быть сложными, даже для кажущегося простого ввода. Предположим, что вход в синтаксический анализатор является математическим выражением, а выход представляет собой список кортежей, которые описывают ввод.Как бы вы протестировали что-то со сложным выходом?
Таким образом, выход может составлять 20 строк.
Как бы вы пишете тест юнита? Запустил бы синтаксический анализатор, проверив результат вручную, и если это будет правильно, отбросьте результат в модульный тест в качестве правильного ответа?
Или это просто безумие, и мне нужно сделать что-то по-другому?
Парсер рекурсивный спуск.Поэтому, если parse() вызывает a() b() и c(), вы рекомендуете, чтобы я вместо этого предпочитал тестировать эти методы, или то, что они вызывают и т. Д. И т. Д. Я не согласен с этим. Но что тогда будет более высоким уровнем тестирования, где я, конечно, тестирую публичные интерфейсы? –