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 

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

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


person EvilKarter    schedule 23.12.2013    source источник


Ответы (2)


Если вы просматриваете 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');
}

Думаю, это поможет вам разобраться в вашей проблеме.

person Chaulagai    schedule 23.12.2013
comment
Привет, я добавил к своему вопросу импорт файлов CTestCase. Но я не могу решить свою проблему. Можно ли ее решить? - person EvilKarter; 24.12.2013

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

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