Как можно иметь два набора тестов, связанных с разными приложениями, в одном и том же плагине?

В настоящее время я работаю с sfPhpUnitPlugin над проектом sf 1.4, и у меня возникла проблема с тестированием плагинов.

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

Мои наборы являются копиями этого шаблона, который поставляется с sfPhunitPlugin:

<?php

class {className} extends sfBasePhpunitTestSuite
  implements sfPhpunitContextInitilizerInterface
{
    /**
     * Dev hook for custom "setUp" stuff
     */
    protected function _start()
    {
      $this->_initFilters();
    }

    /**
     * Dev hook for custom "tearDown" stuff
     */
    protected function _end()
    {
    }

    protected function _initFilters()
    {
      $filters = sfConfig::get('app_sfPhpunitPlugin_filter', array());
      foreach ($filters as $filter) {
        PHPUnit_Util_Filter::addDirectoryToFilter($filter['path'], $filter['ext']);
      }
    }

    public function getApplication()
    {
      return '{application}';
    }
}

Я полагаю, мне нужно добавить что-то вроде этого в app.yml каждого приложения:

testunit:
  sfPhpunitPlugin:
    filter:
      - {path: 'backend', ext: '.php'}

но мне трудно определить, как будет выглядеть ключ пути, у меня сложилось впечатление, что это должен быть полный путь, потому что include_path не содержит путь плагина, который я тестирую, когда вызывается addDirectoryToFilter(). Какие-нибудь советы? Кто-нибудь сделал это еще?


person greg0ire    schedule 05.01.2011    source источник


Ответы (1)


На самом деле вам нужно создать два набора классов, которые реализуют интерфейс sfPhpunitContextInitilizerInterface и реализуют все необходимые методы.

Затем поместите эти два набора в две разные папки, например:

SF_PLUGIN_DIR/ВАШ_PLUGIN/test/phpunit/unit/app1/App1TestSuite.php SF_PLUGIN_DIR/ВАШ_PLUGIN/test/phpunit/unit/app2/App2TestSuite.php

Все тесты в каталоге app1 или подкаталогах будут запускаться в приложении symfony, определенном в App1TestSuite.php, и по тем же правилам для каталога app2.

Если вы хотите динамически запускать тесты в разных приложениях, вы можете определить эту логику в методах, требуемых интерфейсом (getEnviroment и getApplication).

Не стесняйтесь спрашивать меня, есть ли у вас еще какие-либо вопросы.

person Maksim Kotlyar    schedule 17.01.2011
comment
Приложение определяется методом getApplication()? С вашим методом конфигурация, которую я добавил в свое приложение (см. вопрос), все еще нужна или нет? - person greg0ire; 18.01.2011
comment
Функциональность фильтров не связана с настройкой контекста приложения. В следующем выпуске плагина я удалю его, потому что поведение фильтра было изменено в версии phpunit 3.5. - person Maksim Kotlyar; 18.01.2011
comment
app.yml больше не используется для конфигурации плагина, вместо этого у плагина есть собственный файл, который называется phpunit.yml. - person Maksim Kotlyar; 18.01.2011
comment
sfPhpunitContextInitilizerInterface определяет два метода getApplication и getEnvironment. Оба эти метода должны возвращать строку, представляющую приложение и среду. Всю остальную работу по настройке конфигурации и контекста инициализации плагин будет выполнять внутри. Если вы хотите посмотреть подробнее, посмотрите на метод sfBasePhunitTestSuite::setupContext. - person Maksim Kotlyar; 18.01.2011
comment
спасибо за это объяснение, я только что посмотрел на этот метод, он намного понятнее! - person greg0ire; 18.01.2011