Как выполнить модульное тестирование парсера, который возвращает объекты "Tell-Dont-Ask"?
У меня есть два класса, Parser
а также Item
, Класс Parser анализирует некоторый структурированный документ и возвращает Item
-объекты, если вы называете что-то вроде Parser::GetItem(int some_id)
, Класс Item был написан с учетом принципа "говори - не спрашивай". Под этим я подразумеваю, что у него нет методов получения для нескольких внутренних переменных, которые были заполнены Parser
на строительстве.
Теперь возникает вопрос: как я могу Parser
учебный класс? Как проверить, если внутренний Item
переменные были правильно проанализированы? Должен ли я переставить свои занятия? Может быть плохой дизайн, что интерфейс парсера возвращает полностью построенный Item
объекты?
1 ответ
Ваш дизайн может быть не идеальным, но его трудно понять, не глядя на код.
Что-то спросить себя - Парсер, скрывающий слишком много информации, и, как следствие, слишком много.
Я настоятельно рекомендую вам посмотреть эту презентацию от Майкла Фезера, в которой (что интересно) он обсуждает, как улучшить дизайн парсера с помощью тестов, и похоже, что решаемая им проблема похожа на ту, которую вы пытаетесь решить. Michael Feathers - глубокая синергия между тестируемостью и хорошим дизайном