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');
}
Я думаю, это поможет вам понять вашу проблему.