PHPUnit Runner

Lightning

Трудоголик
PHPUnit Runner

Ищу нормальный скрипт, который умеет автоматически запускать все тесты в директории (рекурсивно)?
Скачал Stagehand TestRunner. Пришлось повозиться с путями. Но он все равно не работает )))
Есть что-нибудь другое готовое?
 

whirlwind

TDD infected, paranoid
:confused:

А ты вообще доку на PHPUnit открывал хоть раз? Или тебе надо обязательно на доисторической версии phpunit-а это делать?
 

Lightning

Трудоголик
Открывал один раз. Только сегодня перешел с simpletest-a на phpunit. Версия 3.4.11
 

Lightning

Трудоголик
Так пробовал уже
Код:
PHPUnit 3.4.11 by Sebastian Bergmann.



Time: 0 seconds, Memory: 3.50Mb

OK (0 tests, 0 assertions)
Значит у меня что-то не работает.
 

whirlwind

TDD infected, paranoid
Ну ты что то с тестами значит намудрил. У меня-то работает. И не первый год, поверь. Почитай доку спокойно. Такой инструмент надо знать хорошо. От симплтеста он отличается кардинально.
 

Lightning

Трудоголик
Создал папку, положил в нее один файл с простейшим тестом.
Один тест запускается нормально, а директорию не хочет.
PHP 5.3
OS Ubuntu 9.04
PHPUnit устанавливал как здесь написано: http://www.phpunit.de/manual/3.4/en/installation.html

-~{}~ 17.03.10 01:09:

Уже работает

-~{}~ 17.03.10 01:09:

Это я лоханулся
 

korchasa

LIMB infected
Еще бы он научился единоразово сетапится на всю директорию. Жутко бесит после SimpleTest+tests_runner.
 

whirlwind

TDD infected, paranoid
korchasa ты о чем? если это то, о чем я подумал, то он это отлично умеет :)
 

korchasa

LIMB infected
whirlwind
При запуске одного или нескольких тестов из папки, просетапиться ОДИН раз. Как? Не так чтобы ручками указывать, а автомагически.
 

korchasa

LIMB infected
Автор оригинала: whirlwind
что значит просетапиться? нажимаешь в консоли up + enter :)
Пример из жизни. Есть пакет foo. Его использование подразумевает наличие определенных таблиц в базе. Дамп базы лежит в самом пакете. Соответственно перед выполнением любого теста, на этот пакет, хочется инициализации БД этими самыми дампами. Не на каждый тест, не на каждый TestSuite, а один раз. Или, например, рестарт memcached, что тоже не очень быстро.

-~{}~ 17.03.10 18:53:

В общем, то, что в tests_runner'е называется иерархическими фикстурами.

У меня как-то так на скорую руку получилось:
PHP:
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;
    }
}
 

whirlwind

TDD infected, paranoid
А, где-то ты эту тему уже поднимал. Я такой подход не разделяю, но не отвергаю вариант, что тут замешано фаулеровское behavior/state testing. В любом случае, я уверен, что если очень надо, то можно сделать через http://www.phpunit.de/manual/current/en/appendixes.configuration.html + testSuiteLoaderClass как нибудь.

-~{}~ 17.03.10 19:20:

PS. Но требовать реализации этого как стендалон фичи несколько смело. Ведь не у всех такой подход в организации пакетов и их тестирования. У тебя coupling пакетов в этом случае все равно остается. Изоляция - это миф.
 

fixxxer

К.О.
Партнер клуба
мемкеш не надо рестартить
его достаточно флашить :)

-~{}~ 17.03.10 19:34:

>>Не на каждый тест, не на каждый TestSuite, а один раз
а то что результаты тестов становятся зависимыми от их последовательности это как бы пофиг?
 

whirlwind

TDD infected, paranoid
fixxxer не, ну там теоретически может быть инициализация схемы бд или еще что то. Другой вопрос - когда такое требуется. Если этот отдельный пакет настолько отдельный, что у него своя фикстура, то и тестироваться он должен как отдельный проект. А если это в составе проекта пакет, то когда нужна такая инициализация? Вряд-ли на этапе разработки когда на каждую строчку идет запуск теста это хорошая идея на каждый запуск такую жирную процедуру выполнять. А при сборке проекта нет смысла рассматривать отдельно тесты для одного пакета, для второго, третьего. Тут либо собрался полностью, либо нет. Так что я смысла не вижу, один гемор.
 

korchasa

LIMB infected
Автор оригинала: whirlwind
PS. Но требовать реализации этого как стендалон фичи несколько смело. Ведь не у всех такой подход в организации пакетов и их тестирования. У тебя coupling пакетов в этом случае все равно остается. Изоляция - это миф.
Т.е. фича в xml реализована в виде bootstrap? Собственно вопрос почему ее нет для запуска по файловой системе.

-~{}~ 17.03.10 19:57:

Автор оригинала: whirlwind
fixxxer не, ну там теоретически может быть инициализация схемы бд или еще что то. Другой вопрос - когда такое требуется. Если этот отдельный пакет настолько отдельный, что у него своя фикстура, то и тестироваться он должен как отдельный проект. А если это в составе проекта пакет, то когда нужна такая инициализация? Вряд-ли на этапе разработки когда на каждую строчку идет запуск теста это хорошая идея на каждый запуск такую жирную процедуру выполнять. А при сборке проекта нет смысла рассматривать отдельно тесты для одного пакета, для второго, третьего. Тут либо собрался полностью, либо нет. Так что я смысла не вижу, один гемор.
Смысл в том, чтобы не разделять эти два вида тестов: тестирование всего и тестирование отдельного класса. Чтобы мне не надо было думать в каком у меня сейчас состоянии база и синхронизирована она с кодом или нет. Я просто один раз выстраиваю иерархию фикстур, а потом сколько угодно раз запускаю тесты.

-~{}~ 17.03.10 19:59:

Автор оригинала: fixxxer
мемкеш не надо рестартить
его достаточно флашить :)
В тестах на управление демоном мне надо его гарантировано останавливать, например ;)

Автор оригинала: fixxxer
>>Не на каждый тест, не на каждый TestSuite, а один раз
а то что результаты тестов становятся зависимыми от их последовательности это как бы пофиг?
Почему?
 

whirlwind

TDD infected, paranoid
Делаешь конфиг и ложишь в папку с тестами. Запускаешь phpunit с нужным конфигом. Или предложи алгоритм, по которому phpunit телепатически узнает в каком файле у тебя нужный сетап (нужный конфиг).

-~{}~ 17.03.10 20:03:

Чтобы мне не надо было думать в каком у меня сейчас состоянии база и синхронизирована она с кодом или нет.
Рекомендую открыть для себя setUpBeforeClass и tearDownAfterClass и пользоваться ими как все.
 

korchasa

LIMB infected
Автор оригинала: whirlwind
Делаешь конфиг и ложишь в папку с тестами. Запускаешь phpunit с нужным конфигом. Или предложи алгоритм, по которому phpunit телепатически узнает в каком файле у тебя нужный сетап (нужный конфиг).
В случае запуска по файловой системе он "телепатически" (по маске *Test.php) узнает какие файлы являются тестами. Почему бы не узнавать какие являются фикстурами по имени Setup.php, например?

Автор оригинала: whirlwind
Рекомендую открыть для себя setUpBeforeClass и tearDownAfterClass и пользоваться ими как все.
Еще раз. Мне не нужно BeforeClass, мне нужно BeforeSuite.
 

whirlwind

TDD infected, paranoid
Ну вот же все есть http://www.phpunit.de/manual/3.1/en/organizing-test-suites.html
Напиши класс который будет
"телепатически" (по маске *Test.php) узнает какие файлы являются тестами
и напиши класс top suite. В чем проблема? Написать? Это наша работа.

-~{}~ 17.03.10 20:21:

Не на каждый тест, не на каждый TestSuite, а один раз.
Мне не нужно BeforeClass, мне нужно BeforeSuite.
По моему, ты запутался.
 

korchasa

LIMB infected
Автор оригинала: whirlwind
Ну вот же все есть http://www.phpunit.de/manual/3.1/en/organizing-test-suites.html
Напиши класс который будет
Если использовать AllTests и TestSuite, то проблем нет. Я о запуске по файловой системе и запуске отдельного теста.

Ладно, это разговор ни о чем. Нет так нет. Все равно уже написал :)
 
Сверху