Yii: разработка по контракту с PHPUnit

Почему работает вызов PHPUnit в классе CTestCase:

require_once('PHPUnit/Autoload.php');
....

PHPUnit_Framework_Assert::assertNotNull($object);

Но если я называю это так же в файле каталога компонентов, он показывает мне:

require_once(PHPUnit/Autoload.php): failed to open stream: No such file or directory

Даже если я добавлю тот же импорт, что и в CTestCase, он не будет работать.

require_once('PHPUnit/Util/Filesystem.php'); // workaround for PHPUnit <= 3.6.11
require_once('PHPUnit/Autoload.php');
spl_autoload_unregister('phpunit_autoload');
Yii::registerAutoloader('phpunit_autoload');

Это показывает мне:

require_once(PHPUnit/Util/Filesystem.php): failed to open stream: No such file or directory 

Я использую пространства имен и хочу использовать дизайн по контракту.

Я действительно надеюсь, что кто-то может мне помочь.

2 ответа

Решение

Благодаря этому посту я нашел решение для моей проблемы. Вот код, позволяющий включать утверждения PHPUnit для разработки по контракту в контроллерах Yii и вспомогательных классах.

spl_autoload_unregister(array('YiiBase','autoload'));
require_once('PHPUnit/Autoload.php');
spl_autoload_register(array('YiiBase','autoload'));

Если вы путешествуете внутри Frameworks/test/CTestCase.php, то вы обнаружите, как это,

require_once('PHPUnit/Runner/Version.php');
require_once('PHPUnit/Util/Filesystem.php'); // workaround for PHPUnit <= 3.6.11

spl_autoload_unregister(array('YiiBase','autoload'));
require_once('PHPUnit/Autoload.php');
spl_autoload_register(array('YiiBase','autoload')); // put yii's autoloader at the end

if (in_array('phpunit_autoload', spl_autoload_functions())) { // PHPUnit >= 3.7 'phpunit_autoload' was obsoleted
    spl_autoload_unregister('phpunit_autoload');
    Yii::registerAutoloader('phpunit_autoload');
}

Я думаю, это поможет вам понять вашу проблему.

Другие вопросы по тегам