Как управлять временем сборки в TDD - PullRequest
3 голосов
/ 30 мая 2009

Привет, в моем проекте у нас есть сотни тестовых случаев. Эти тестовые примеры являются частью процесса сборки, который запускается при каждой регистрации и отправляет почту нашей группе разработчиков. Этот проект довольно большой и работает уже более пяти лет.
Теперь у нас так много тестовых случаев, что сборка занимает больше часа. Некоторые тестовые примеры не структурированы должным образом, и после их рефакторинга я смог существенно сократить время выполнения, но у нас есть сотни тестовых примеров и их рефакторинг кажется, слишком много.
Теперь я запускаю некоторые тестовые примеры (выполнение которых занимает очень много времени) только как часть ночной сборки, а не как часть каждой проверки.
Мне любопытно, как другие ребята справляются с этим.

Ответы [ 3 ]

3 голосов
/ 30 мая 2009

Я полагаю, что в «Эффективной работе с устаревшим кодом» он сказал, что если ваш набор тестов займет больше пары минут, это слишком сильно замедлит работу разработчиков, и тесты начнут игнорироваться. Похоже, вы попали в эту ловушку.

Работают ли ваши тесты с базой данных? Тогда это, скорее всего, ваш самый большой источник проблем с производительностью. Как правило, тестовые случаи никогда не должны делать ввод / вывод, если это возможно. Внедрение зависимостей может позволить вам заменить объект базы данных фиктивными объектами, которые имитируют часть базы данных вашего кода. Это позволяет вам тестировать код , не беспокоясь о правильности настройки базы данных.

Я настоятельно рекомендую Эффективно работать с устаревшим кодом от Michael Feathers. Он обсуждает, как справиться со многими головными болями, с которыми вы, похоже, сталкиваетесь, без необходимости рефакторинга кода сразу.

UPDATE:

Еще одна возможная помощь - что-то вроде NDbUnit. Я еще широко не пользовался, но выглядит многообещающе: http://code.google.com/p/ndbunit/

0 голосов
/ 18 июня 2009

У нас около 1000 тестов, большой процент тех, кто общается через REST и работает с базой данных. Общее время выполнения составляет около 8 минут. Час кажется чрезмерным, но я не знаю, что вы делаете и насколько сложны ваши тесты.

Но я думаю, что есть способ помочь вам. Мы используем TeamCity, и у него есть хорошая возможность иметь несколько агентов сборки. Что вы можете сделать, так это разделить ваш тестовый проект на подпроекты, каждый из которых содержит только несколько тестов. Вы можете использовать JNunit / NUnit Categories для их разделения. Затем вы должны настроить TeamCity так, чтобы каждый агент создавал только один тип подпроекта. Таким образом, вы получите параллельное выполнение тестов. С несколькими агентами (вы получаете 3 бесплатно), вы сможете получить до 20 минут, что может быть даже приемлемо. Если вы поместите каждый агент в виртуальную машину, вам могут даже не потребоваться дополнительные машины, вам просто нужно много оперативной памяти.

0 голосов
/ 07 июня 2009

Возможно, вы могли бы подумать о том, чтобы сохранить базу данных Oracle, но запустить ее с оперативной памяти? Он не должен быть большим, потому что он будет содержать только тестовые данные.

...