Как выполнить модульное тестирование парсера, который возвращает объекты "Tell-Dont-Ask"?

У меня есть два класса, Parser а также Item, Класс Parser анализирует некоторый структурированный документ и возвращает Item-объекты, если вы называете что-то вроде Parser::GetItem(int some_id), Класс Item был написан с учетом принципа "говори - не спрашивай". Под этим я подразумеваю, что у него нет методов получения для нескольких внутренних переменных, которые были заполнены Parser на строительстве.

Теперь возникает вопрос: как я могу Parser учебный класс? Как проверить, если внутренний Item переменные были правильно проанализированы? Должен ли я переставить свои занятия? Может быть плохой дизайн, что интерфейс парсера возвращает полностью построенный Item объекты?

1 ответ

Решение

Ваш дизайн может быть не идеальным, но его трудно понять, не глядя на код.

Что-то спросить себя - Парсер, скрывающий слишком много информации, и, как следствие, слишком много.

Я настоятельно рекомендую вам посмотреть эту презентацию от Майкла Фезера, в которой (что интересно) он обсуждает, как улучшить дизайн парсера с помощью тестов, и похоже, что решаемая им проблема похожа на ту, которую вы пытаетесь решить. Michael Feathers - глубокая синергия между тестируемостью и хорошим дизайном

Другие вопросы по тегам