【问题标题】:Yii: Design-By-Contract with PHPUnitYii:使用 PHPUnit 进行合同设计
【发布时间】:2014-01-11 22:27:39
【问题描述】:

为什么在 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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 嗨,我在我的问题中添加了 CTestCase 的文件导入。但我无法解决我的问题。有办法解决吗?
    【解决方案2】:

    感谢post 我找到了解决问题的方法。 这是在 Yii 控制器和助手类中启用 PHPUnit 的按合同设计断言的代码。

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

    【讨论】:

      猜你喜欢
      • 2013-12-28
      • 2012-09-03
      • 2016-11-29
      • 2012-07-08
      • 2012-08-21
      • 2014-11-30
      • 2013-06-19
      • 2012-12-11
      • 2011-12-16
      相关资源
      最近更新 更多