Господа, прошу совета: крупный проект, сложная логика, активно пишется. Нужно писать юнит-тесты, для чего нужна куча фикстур. Как вы их оформляете и как поддерживаете актуальными?
Писать в массивы файлами (как рекомендует Yii) - пробывали - сложно держать актуальными - у нас в неделю по 5-10 миграций, структура довольно активно меняется + сами объекты сложные, некоторые агрегаты раскиданы по 10и таблицам.
Сейчас думаем сделать предзаполненную базу, набить туда объектов в разных вариантах. Но опять получается нужно каждый раз на эту базу накатывать миграции что-ли...
Есть мысль не юзать предзаполненную БД а перед прогоном тестов создавать их используя код (создать пару юзеров, товаров, заказов и т.п.) Тут возникают опасения что долго будет + опять поддерживать надо - например чтоб привести заказ в определенное состояние - куча кода нужна...
В общем, как вы поддерживаете сложные фикстуры, поделитесь опытом!?
Подробнее -- делаешь фикстуры, потом доработал БД и руками че-то наполнил... и все фикстура выдохлась
тогда еще раз через gii выкатил актуальную инфу в файл и готово :)
Писать в массивы файлами (как рекомендует Yii) - пробывали - сложно держать актуальными - у нас в неделю по 5-10 миграций, структура довольно активно меняется + сами объекты сложные, некоторые агрегаты раскиданы по 10и таблицам.
Конечно сложно. А откуда появляется метрика "Код с тестами писать в три раза медленнее"
Код поддерживать, тесты поддерживать, фикстуры поддерживать.
Не, ну есть куски кода с несложными объектами, которые меняются крайне редко - для них уже тесты/фикстуры написаны - и это уже хорошее подспорье. Но вот писать юнит тесты для действительно сложных объектов и часто меняющейся реализации мы никак не решаемся, по большей части как раз из-за фикстур. Так то у нас большая часть покрыта Acceptance тестами (их пишут аж 2 человека), но unit тестов не хватает...
mitaichik, я знаю эту боль, но она не особо лечится.
Попробуйте вместо массивов-фикстур использовать тестовую базу данных, которая должна мигрировать стандартными средствами (migrate) и заполняться стандартными средствами (seed)
видимо Вы пропустили этап планирования. Это плохо, когда структура активно меняется. Добавляется - норм, но тогда нет проблем, а вот меняется - это "бедулька".
например чтоб привести заказ в определенное состояние - куча кода нужна