Yii:与PHPUnit签订合同

时间:2013-12-23 17:09:37

标签: php yii phpunit require-once design-by-contract

为什么在CTestCase类中调用PHPUnit会起作用:

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 

我正在使用名称空间,并希望使用design-by-contract

我真的希望有人可以帮助我。

2 个答案:

答案 0 :(得分:0)

如果您在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');
}

我认为,它会帮助您理解您的问题。

答案 1 :(得分:0)

感谢post我找到了解决问题的方法。 以下是在Yii控制器和帮助程序类中启用PHPUnit的Design-By-Contract断言的代码。

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