2013-12-11 4 views
3

Я разрабатываю CakePHP 2.4.3 и использую Unittest много. На данный момент в основном на моделях.Как ускорить unittests для CakePHP

Есть ли возможность сократить время выполнения этих тестов? Что делает их такими медленными? Вставки db светильников?

Я замечаю, что у меня нет терпения ждать, пока тесты будут запущены, и, ожидая, я начну заниматься другими вещами, а затем, когда я вернусь, я потерял контроль над тем, какую проблему я тестировал.

Спасибо за любые подсказки!

Бедовая Джейн

+1

UnitTests не должны быть «быстрым», они, как предполагается, доказательство того, что что-то работает. Нет необходимости ускорять тесты ИМО. Или, по крайней мере, это время, которое может быть потрачено иначе более разумным и полезным способом. – mark

+2

Вы можете отфильтровать, какие тесты выполняются. Поэтому большую часть времени вы можете запускать, возможно, только 1-5 одиночных тестов из одного класса. А затем периодически, вы запускаете все из них. –

ответ

9

Я категорически не согласен здесь с отметками комментарий:

UnitTests не должны быть «быстрым»

Технически они не то, что это правда, но это может стать раздражающим , Если вы используете CI при большом тестировании проекта, может стать ужасно медленным. Вы не хотите ждать 30 минут, пока все тесты не будут выполнены. У нас был этот случай в проекте с ~ 550 таблицами.

Узкое место на самом деле является загрузкой светильника. Потому что для каждого теста все приборы должны создаваться снова и снова. Это медленно.

Мы используем внутренний плагин для копирования шаблона тестовой базы данных в тестовую базу данных вместо использования приборов. Это снизило время для запуска тестов в этом проекте с 30 минут до нескольких минут.

Плагин с открытым исходным кодом, который должен быть способен это сделать, также является https://github.com/lorenzo/cakephp-fixturize. Вы можете загружать приборы из файлов SQL или загружать их из базы данных шаблонов также, see this section of the readme.md.

Если вы просто должны проверить один метод не существует никакой необходимости выполнить все тесты, вы можете фильтровать тесты:

cake test <file> --filter testMyMethod 
+0

Спасибо, бурзум! Я буду смотреть на это и давать обратную связь здесь. И я согласен с вашим мнением, так как я даю ТДД попытку. И с этим продолжительность тестов действительно убийца. –

+0

Отметьте свой ответ как правильный, было бы хорошо, а потом, спасибо. – burzum

+0

Удивительный ответ, @burzum. Я также использую fixturize. –

Смежные вопросы