phing и phpunit + начальная загрузка - PullRequest
4 голосов
/ 09 сентября 2010

Как запустить набор тестов PHPUnit с файлом начальной загрузки с phing?

Структура моего приложения:

application/
library/
tests/
  application/
  library/
  bootstrap.php
  phpunit.xml
build.xml

phpunit.xml:

<phpunit bootstrap="./bootstrap.php" colors="true">
    <testsuite name="Application Test Suite">
        <directory>./</directory>
    </testsuite>
    <filter>
        <whitelist>
            <directory
              suffix=".php">../library/</directory>
            <directory
              suffix=".php">../application/</directory>
            <exclude>
                <directory
                  suffix=".phtml">../application/</directory>
            </exclude>
        </whitelist>
    </filter>
</phpunit>

, то:

cd /path/to/app/tests/
phpunit
#all test passed

Но как мне запустить тесты из /path/to/app/ dir? Проблема в том, что bootstrap.php зависит от относительных путей к библиотеке и приложению.

Если я запускаю phpunit --configuration tests/phpunit.xml /tests Я получаю кучу файлов не найденных ошибок.

Как мне записать build.xml файл для phing, чтобы выполнить тесты так же, как phpunit.xml делает?

Ответы [ 2 ]

4 голосов
/ 10 сентября 2010

Думаю, лучший способ - создать небольшой PHP-скрипт для инициализации ваших юнит-тестов, выполнив следующее:

В моем phpunit.xml / bootstrap = "./ initalize.php"

initalize.php

define('BASE_PATH', realpath(dirname(__FILE__) . '/../'));
define('APPLICATION_PATH', BASE_PATH . '/application');

// Include path
set_include_path(
    '.'
    . PATH_SEPARATOR . BASE_PATH . '/library'
    . PATH_SEPARATOR . get_include_path()
);

// Define application environment
define('APPLICATION_ENV', 'testing');
require_once 'BaseTest.php';

BaseTest.php

abstract class BaseTest extends Zend_Test_PHPUnit_ControllerTestCase
{

/**
 * Application
 *
 * @var Zend_Application
 */
public $application;

/**
 * SetUp for Unit tests
 *
 * @return void
 */
public function setUp()
{
    $session = new Zend_Session_Namespace();
    $this->application = new Zend_Application(
                    APPLICATION_ENV,
                    APPLICATION_PATH . '/configs/application.ini'
    );

    $this->bootstrap = array($this, 'appBootstrap');

    Zend_Session::$_unitTestEnabled;

    parent::setUp();
}

/**
 * Bootstrap
 *
 * @return void
 */
public function appBootstrap()
{
    $this->application->bootstrap();
}
}

Все мои юнит-тесты расширяют класс BaseTest, он работает как шарм.

3 голосов
/ 10 ноября 2010

Когда вы используете задачи PHPUnit в Phing, вы можете включить свой файл начальной загрузки следующим образом:

<target name="test">
    <phpunit bootstrap="tests/bootstrap.php">
        <formatter type="summary" usefile="false" />
        <batchtest>
            <fileset dir="tests">
                <include name="**/*Test.php"/>
            </fileset>
        </batchtest>
    </phpunit> 
</target> 
...