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 

我正在使用命名空间,并希望使用合同设计。

真的希望有人能帮助我。

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

我认为,它将帮助您了解您的问题。

多亏了这篇文章,我找到了解决问题的方法。下面是在 Yii 控制器和帮助程序类中启用 PHPUnit 的契约设计断言的代码。

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

最新更新