Пример из жизни. Есть пакет foo. Его использование подразумевает наличие определенных таблиц в базе. Дамп базы лежит в самом пакете. Соответственно перед выполнением любого теста, на этот пакет, хочется инициализации БД этими самыми дампами. Не на каждый тест, не на каждый TestSuite, а один раз. Или, например, рестарт memcached, что тоже не очень быстро.Автор оригинала: whirlwind
что значит просетапиться? нажимаешь в консоли up + enter![]()
abstract class BaseTest extends \PHPUnit_Framework_TestCase
{
const GLOBAL_SETUP_METHOD = 'globalSetUp';
static $inited_testcase = array();
function __construct($name = null, array $data = array(), $dataName = '')
{
parent::__construct($name, $data, $dataName);
$this->_initGlobalSetUp();
}
protected function _initGlobalSetUp()
{
$testcase_class = get_called_class();
if(false !== array_search($testcase_class, self::$inited_testcase))
return;
$setup_method = new \ReflectionMethod($testcase_class, self::GLOBAL_SETUP_METHOD);
$testcase_class_reflection = new \ReflectionClass($testcase_class);
if($setup_method->getFileName() === $testcase_class_reflection->getFileName())
call_user_func(array($testcase_class, self::GLOBAL_SETUP_METHOD));
self::$inited_testcase[] = $testcase_class;
}
}
Т.е. фича в xml реализована в виде bootstrap? Собственно вопрос почему ее нет для запуска по файловой системе.Автор оригинала: whirlwind
PS. Но требовать реализации этого как стендалон фичи несколько смело. Ведь не у всех такой подход в организации пакетов и их тестирования. У тебя coupling пакетов в этом случае все равно остается. Изоляция - это миф.
Смысл в том, чтобы не разделять эти два вида тестов: тестирование всего и тестирование отдельного класса. Чтобы мне не надо было думать в каком у меня сейчас состоянии база и синхронизирована она с кодом или нет. Я просто один раз выстраиваю иерархию фикстур, а потом сколько угодно раз запускаю тесты.Автор оригинала: whirlwind
fixxxer не, ну там теоретически может быть инициализация схемы бд или еще что то. Другой вопрос - когда такое требуется. Если этот отдельный пакет настолько отдельный, что у него своя фикстура, то и тестироваться он должен как отдельный проект. А если это в составе проекта пакет, то когда нужна такая инициализация? Вряд-ли на этапе разработки когда на каждую строчку идет запуск теста это хорошая идея на каждый запуск такую жирную процедуру выполнять. А при сборке проекта нет смысла рассматривать отдельно тесты для одного пакета, для второго, третьего. Тут либо собрался полностью, либо нет. Так что я смысла не вижу, один гемор.
В тестах на управление демоном мне надо его гарантировано останавливать, напримерАвтор оригинала: fixxxer
мемкеш не надо рестартить
его достаточно флашить![]()
Почему?Автор оригинала: fixxxer
>>Не на каждый тест, не на каждый TestSuite, а один раз
а то что результаты тестов становятся зависимыми от их последовательности это как бы пофиг?
Рекомендую открыть для себя setUpBeforeClass и tearDownAfterClass и пользоваться ими как все.Чтобы мне не надо было думать в каком у меня сейчас состоянии база и синхронизирована она с кодом или нет.
В случае запуска по файловой системе он "телепатически" (по маске *Test.php) узнает какие файлы являются тестами. Почему бы не узнавать какие являются фикстурами по имени Setup.php, например?Автор оригинала: whirlwind
Делаешь конфиг и ложишь в папку с тестами. Запускаешь phpunit с нужным конфигом. Или предложи алгоритм, по которому phpunit телепатически узнает в каком файле у тебя нужный сетап (нужный конфиг).
Еще раз. Мне не нужно BeforeClass, мне нужно BeforeSuite.Автор оригинала: whirlwind
Рекомендую открыть для себя setUpBeforeClass и tearDownAfterClass и пользоваться ими как все.
и напиши класс top suite. В чем проблема? Написать? Это наша работа."телепатически" (по маске *Test.php) узнает какие файлы являются тестами
Не на каждый тест, не на каждый TestSuite, а один раз.
По моему, ты запутался.Мне не нужно BeforeClass, мне нужно BeforeSuite.
Если использовать AllTests и TestSuite, то проблем нет. Я о запуске по файловой системе и запуске отдельного теста.Автор оригинала: whirlwind
Ну вот же все есть http://www.phpunit.de/manual/3.1/en/organizing-test-suites.html
Напиши класс который будет