PHP: включать файлы только при запуске phing? - PullRequest
0 голосов
/ 18 мая 2009

У меня следующая структура папок:

/main
    /loader.php
    /build.xml
    /components
        /package1
            /class1.php
        /package2
            /class2.php
    /tests
        /package1
            /class1.test.php
        /package2
            /class2.test.php

Когда я запускаю веб-приложение, я сначала загружаю loader.php и включаю другие компоненты, вызывая Loader::load( 'package_name' ). Затем все необходимые файлы включены. Хорошо, что мне не нужно включать loader.php в файлы классов, потому что я могу рассчитывать на наличие рабочего экземпляра Loader.

Классы Unit Test моделируют это поведение, явно включая все необходимые классы. Так что нет проблем с phing и PHPUnit.

Но теперь я хочу создать отчет о покрытии с помощью phing и Xdebug. Проблема в том, что phing загружает каждый PHP-файл для создания базы данных покрытия. К сожалению, он останавливается, потому что не может найти класс Loader, который используется в файлах PHP.

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

Другая идея: я мог бы также настроить анализ покрытия таким образом, чтобы он сканировал каталог модульных тестов и, следовательно, находил все необходимые включения. Затем мне нужно отфильтровать классы, которые соответствуют шаблону, подобному /Test$/i или около того. Возможно ли это?

1 Ответ

1 голос
/ 07 августа 2009

Я целую вечность искал что-то подобное.

В итоге я закончил с изменениями ниже. В основном вы говорите php cli, что нужно добавить php-файл, содержащий вашу логику загрузки.

В php.ini моего клика я установил следующее:

auto_prepend_file = autoload.php

Я удостоверился, что файл был в моем пути включения (/ usr / share / php в моем случае) и добавил в него следующие строки (я использую Zend Framework, который также находится в моем пути включения):

require_once "Zend / Loader / Autoloader.php"; $ autoloader = Zend_Loader_Autoloader :: getInstance (); $ Autoloader-> registerNamespace ( 'Model _');

Теперь, что вы можете сделать, это определить вашу функцию __autoload и определить, что нужно загружать, но вы поняли идею.

Это уродливый хак, но у меня все получилось.

ЗКО Йерун

...