Lightning
Трудоголик
Вопросы по TDD
Три недели как пытаюсь освоить TDD. Использую SimpleTest.
Возникло несколько моментов, в которых я сомневаюсь. У меня в архитектуре проекта применяется MVC, причем на основании URL выбирается и создается контроллер, а дальше он (в зависимости от запроса, данных из конфига и т.д.) выбирает и создает view и объекты модели. Тестирование View-ов и Model-ей не представляет проблемы, но тестирование контроллеров вызывает трудности, т.к. у меня контроллеры сами порождают объекты.
Что делаю я:
1. Выношу создание View-ов и Model-ей в отдельные методы контроллеров.
2. Генерирую классы моков для View-ов и Model-ей.
3. Создаю моки View-ов и Model-ей. С помощью методов expectArguments() и expectArgumentsAt() задаю данные, которые они должны принять от контроллера.
4. Создаю частичный мок контроллера, в котором перекрываю методы, создающие View-вы и Model-и, с помощью setReturnValue() делаю так, чтобы они возвращали моки.
5. Запускаю частичный мок контроллера, передаю в него тестовые данные и т.д
6. Вызываю методы tally() моков.
Лично мне мой способ не нравится, т.к. тесты получаются сложные и довольно большие. Написать такой тест сразу без ошибок не всегда получается. В результате получается, что нужно параллельно отлаживать тест и класс. Кроме того, вынесение создание объектов в отдельные методы создает лишнюю косвенность, ненужную в данном случае.
Что вы думаете/посоветуете?
Три недели как пытаюсь освоить TDD. Использую SimpleTest.
Возникло несколько моментов, в которых я сомневаюсь. У меня в архитектуре проекта применяется MVC, причем на основании URL выбирается и создается контроллер, а дальше он (в зависимости от запроса, данных из конфига и т.д.) выбирает и создает view и объекты модели. Тестирование View-ов и Model-ей не представляет проблемы, но тестирование контроллеров вызывает трудности, т.к. у меня контроллеры сами порождают объекты.
Что делаю я:
1. Выношу создание View-ов и Model-ей в отдельные методы контроллеров.
2. Генерирую классы моков для View-ов и Model-ей.
3. Создаю моки View-ов и Model-ей. С помощью методов expectArguments() и expectArgumentsAt() задаю данные, которые они должны принять от контроллера.
4. Создаю частичный мок контроллера, в котором перекрываю методы, создающие View-вы и Model-и, с помощью setReturnValue() делаю так, чтобы они возвращали моки.
5. Запускаю частичный мок контроллера, передаю в него тестовые данные и т.д
6. Вызываю методы tally() моков.
Лично мне мой способ не нравится, т.к. тесты получаются сложные и довольно большие. Написать такой тест сразу без ошибок не всегда получается. В результате получается, что нужно параллельно отлаживать тест и класс. Кроме того, вынесение создание объектов в отдельные методы создает лишнюю косвенность, ненужную в данном случае.
Что вы думаете/посоветуете?
типичное заблуждение. плюшки навскидку: